Hia all
I am having a bit of a Friday moment with some SQL and am hoping someone can show me the light…??
I am sure its very basic – but the finer details are some what eluding me today…
I have this script equivalent…
Select
B.Description
Count(B.Description)
Sum(A.Amount)
From
Table1 A
Join Table2 B on (A.id = B.id)
Where table A has one to many records of table B.
This runs fine, but what I am seeing is an incorrect Sum amount due to this one to many association between the two tables.
i.e. if an ID from Table A has £5 in the Amount column, and the same ID exists on 4 records on Table B – my sum result is coming back at £20, I only want a distinct £5.
My initial thought was to do something like putting Distinct in front of the A.Amount (Sum(Distinct A.Amount)) within the aggregate, but this groups by the money values, and not the ID…
I hope that makes sense to someone out there?!
Many thanks in advance!!
Christopher Hill
Swyddog Dadansoddi a Chymorth SQL
SQL Support Analyst
Canolfan Mileniwm Cymru
Wales Millennium Centre
Ebost\Email Christopher.Hill@wmc.org.uk
Ffon\Tel 029 2063 6372
www.wmc.org.uk
Dy Le Di
Make it Yours this year
Cysylltwch yn Gymraeg neu'n Saesneg fel dymunwch
Contact us in English or Welsh as you prefer
Plas Bute\Bute Place
Bae Caerdydd\Cardiff Bay
CF10 5AL
P Meddyliwch am yr amgylchedd cyn printio / Please consider the environment before printing this email
I am trying to write a custom procedure and I know my question can easily be answered by some of you SQL gurus out there…
Here is the code I have so far:
select cc.customer_no, cc.constituency, ct.description, ct.short_desc,
c.fname, c.lname, st.department, st.title, st.hire_date, st.end_date, st.status
from tx_const_cust cc
join t_customer c
on c.customer_no = cc.customer_no
join tr_constituency ct
on ct.id = cc.constituency
join lt_MCFTA_STAFF st
on st.customer_no = c.customer_no
where cc.constituency in (48,49,50)
and st.status = 'Active'
order by c.lname
I want to add in a CASE statement, so that the code pulls fname and lname when the n1n2_ind = 1, but pulls fname2 and lname2 instead, when the n1n2_ind = 2. I am guessing I need something like the below, but am not sure how to format and where to insert the new code into the above statement:
CASE c.fname, c.lname
Where cc.n1n2_ind = 1
ELSE c.fname2. c.lname2
Where cc.n1n2_ind = 2
Thanks in advance for help!
Penny -
Try this on for size:
c.fname, c.lname, st.department, st.title, st.hire_date, st.end_date, st.status,
CASE WHEN cc.n1n2_ind = 2 THEN
c.fname2 +', ' + c.lname2
ELSE c.fname +', ' + c.lname
END as full_name