日期:2014-05-16  浏览次数:20728 次

有主表和子表进行联合查询,当主表出现重复数据时,除了相同那列,其它设为空字符串或者0,请高手指点,谢谢,急急
有主表和子表进行联合查询,当主表出现重复数据时,除了相同那列,其它设为空字符串或者0,请高手指点,谢谢,急急

有表A(A.id, A.Amount, A.TotLR)
子表B(B.Aid, B.DGName, B.Money)
其中B.Aid = A.id

要求对两表进行综合数据查询,查询得到的数据,如果A表中的Amount和TotLr如有重复则为0。

假设有数据如下:
A(1,1000,100)
A(2,2000,200)
A(3,3000,300)

B(1,张山,100)
B(1,李算,100)
B(1,王二,100)

B(2,张山,200)
B(2,李算,200)
B(2,王二,200)

B(3,张山,300)
B(3,李算,300)
B(3,王二,300)

select A.id, A.Amount, A.TotLR, B.DGName, B.Money FROM B INNER JOIN A ON B.Aid = A.id
其查询结果如下:

1,1000,100,张山,100
1,0,0,李算,100
1,0,0,王二,100

2,2000,200,张山,200
2,0,0,李算,200
2,0,0,王二,200

3,3000,300,张山,300
3,0,0,李算,300
3,0,0,王二,300


如何写正确的查询语句才能得到我要的数据,请高手指点,多谢!!

------解决方案--------------------
;with f as 
(
select select A.id, A.Amount, A.TotLR, B.DGName, B.Money FROM B INNER JOIN A ON B.Aid = A.id
)

select
  id,
  case when px=1 then A.Amount else 0 end as  Amount,
  case when px=1 then A.TotLR else 0 end  as TotLR,
  DGName,[Money]
from 
  (select px=row_number()over(partition by id order by getdate()),* from f) as t