当前位置: 代码迷 >> Sql Server >> GROUP BY条件取值有关问题
  详细解决方案

GROUP BY条件取值有关问题

热度:46   发布时间:2016-04-24 08:55:46.0
GROUP BY条件取值问题


--按表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值的那条数据” 什么意思啊?
------解决思路----------------------
引用:
Quote: 引用:


-- 凑个人数,借用楼上的数据。 
-- 适用于 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 行受影响)




在请教个左关联的问题。。

不是直接left join 就行了嗎
------解决思路----------------------
引用:
在请教个左关联的问题。。





select * from tab1 
left join tab2
on tab1.id = tab2.id


------解决思路----------------------
1.最开始的问题,建议使用2# 的答案,思路比较清晰。

2. 第 6# 的问题,你多提供一些数据。
  相关解决方案