
--按表TAB后3字段GROUP BY,取出MXZBLB=1值的那条数据。
------解决思路----------------------
;
WITH TAB(NEWZBBG,MXZBLB,DZKDM,YSDWDM,XMDM,JE)
AS
(
select '7781',1,1,37002004,51590004,1000 union all
select '7780',0,1,37002004,51590004,50 union all
select '7785',0,2,37002004,51590004,100
)
SELECT * FROM(
SELECT ROW_NUMBER()OVER(PARTITION BY DZKDM,YSDWDM,XMDM ORDER BY MXZBLB DESC)RN,NEWZBBG,MXZBLB,DZKDM,YSDWDM,XMDM,SUM(JE)OVER(PARTITION BY DZKDM,YSDWDM,XMDM)JE FROM TAB
) A WHERE RN=1
RN NEWZBBG MXZBLB DZKDM YSDWDM XMDM JE
-------------------- ------- ----------- ----------- ----------- ----------- -----------
1 7781 1 1 37002004 51590004 1050
1 7785 0 2 37002004 51590004 100
(2 row(s) affected)
------解决思路----------------------
-- 凑个人数,借用楼上的数据。
-- 适用于 MXZBLB 的值,只是 1 和 0 的情况
WITH TAB(NEWZBBG,MXZBLB,DZKDM,YSDWDM,XMDM,JE)
AS
(
select '7781',1,1,37002004,51590004,1000 union all
select '7780',0,1,37002004,51590004,50 union all
select '7785',0,2,37002004,51590004,100
)
select
case when max(MXZBLB) = 1 then max(newzbbg * MXZBLB) else max(newzbbg) end NEWZBBG,
max(MXZBLB) MXZBLB , DZKDM , YSDWDM , XMDM, SUM(je) SUM_JE
from TAB
group by DZKDM , YSDWDM , XMDM
NEWZBBG MXZBLB DZKDM YSDWDM XMDM SUM_JE
----------- ----------- ----------- ----------- ----------- -----------
7781 1 1 37002004 51590004 1050
7785 0 2 37002004 51590004 100
(2 行受影响)
------解决思路----------------------
“取出MXZBLB=1值的那条数据” 什么意思啊?
------解决思路----------------------
不是直接left join 就行了嗎
------解决思路----------------------
在请教个左关联的问题。。
select * from tab1
left join tab2
on tab1.id = tab2.id
------解决思路----------------------
1.最开始的问题,建议使用2# 的答案,思路比较清晰。
2. 第 6# 的问题,你多提供一些数据。