0

今天是个好日子!

好吧,我有这种代码,它有点难看,我的一个朋友告诉我,我可以在这里实现案例语句,但我不知道我将如何或如何实现,代码很长,所以如果你能帮助我优化我的代码,我将不胜感激!

PS。请对我温柔一点,我是 T-sql 的新手 :) 谢谢!

SELECT 
         SUM(CYJEWELRY) 'CY_Jewelry'
        ,SUM(CYAPPLICANCE) 'CY_Appliance'
        ,SUM(CYCELLPHONE) 'CY_Cellphone'
        ,SUM(PYJEWELRY) 'PY_Jewelry'
        ,SUM(PYAPPLIANCE) 'PY_Appliance'
        ,SUM(PYCELLPHONE) 'PY_Cellphone'
    FROM

        (   

            ---TOTAL NUNG A FORMAT 0,0,0,0,0,0
            --------------CURRENT YEAR JEWELRY
            SELECT COUNT (*) AS CYJEWELRY,0 AS CYAPPLICANCE,0 AS CYCELLPHONE,0 AS PYJEWELRY,0 AS PYAPPLIANCE,0 AS PYCELLPHONE
            FROM #TEMPTABLE1
            WHERE (fld_StorageGroupID  >= 3 and fld_StorageGroupID <= 14)

        UNION
            -----------CURRENT YEAR APPLIANCE

            SELECT 0,COUNT(*),0,0,0,0
            FROM #TEMPTABLE1
            WHERE fld_StorageGroupID = 1

        UNION
            ------------CURRENT YEAR CELLPHONE

            SELECT 0,0,COUNT(*),0,0,0
            FROM #TEMPTABLE1
            WHERE fld_StorageGroupID = 2

        UNION
            ---------------LAST YEAR JEWELRY
            SELECT  0,0,0,COUNT(*),0,0
            FROM #TEMPTABLE2
            WHERE (fld_StorageGroupID  >= 3 and fld_StorageGroupID <= 14)

        UNION
            -----------------------LAST YEAR APPLIANCE
            SELECT 0,0,0,0,COUNT (*),0
            FROM #TEMPTABLE2
            WHERE fld_StorageGroupID = 1

        UNION
            -------------------------LAST YEAR CELLPHONE
            SELECT 0,0,0,0,0,COUNT(*)
            FROM #TEMPTABLE2
            WHERE fld_StorageGroupID = 2
        )A
4

1 回答 1

1

假设您的数据有点像这个Sql Fiddle Example,请尝试使用SUM()and进行子查询CASE

SELECT SUM(CASE WHEN fld_StorageGroupID  >= 3 and fld_StorageGroupID <= 14 ELSE 0 END) Col1And4,
       SUM(CASE WHEN fld_StorageGroupID = 1 THEN 1 ELSE 0 END)  Col2And5,
       SUM(CASE WHEN fld_StorageGroupID = 2 THEN 1 ELSE 0 END)  Col3And6
FROM #TEMPTABLE1
GROUP BY fld_StorageGroupID

由于您对子查询中的最后 3 列应用相同的过滤器,因此我在这里只完成了前 3 列。

编辑:

我认为这比上面更好(注:) no need to use SUM() in the main query

小提琴示例与数据

select col1_4 CY_Jewelry,
       col2_5 CY_Appliance,
       col3_6 CY_Cellphone,
       col1_4 PY_Jewelry,
       col2_5 PY_Appliance,
       col3_6 PY_Cellphone
from (
select sum(case when id>= 3 and id <= 14 then 1 else 0 end) col1_4,
       sum(case when id = 2 then 1 else 0 end) col2_5,
       sum(case when id = 3 then 1 else 0 end) col3_6
from t
--group by id
) X
于 2013-09-18T10:11:43.003 回答