2013-08-26 37 views
2

我有以下查詢,並給出了結果也顯示在下面。查詢使行成列值不使用PIVOT

SELECT  
     SUM(atm) atm,SUM(cc) cc,SUM(csh) csh ,SUM(chk) chk 
    FROM sales     
    WHERE repId= 9000 
      AND DATEADD(dd,0,DATEDIFF(dd,0,idate)) ='2013-08-25 00:00:00' 

Query result

如何修改查詢,而無需使用PIVOT重新運行,如下圖所示的結果。 Query Result

回答

2

這應該工作

SELECT 'atm' type, SUM(atm) Amount FROM sales     
    WHERE repId= 9000 AND DATEADD(dd,0,DATEDIFF(dd,0,idate)) ='2013-08-25 00:00:00' 
UNION ALL 
SELECT 'cc' type, SUM(cc) Amount FROM sales     
    WHERE repId= 9000 AND DATEADD(dd,0,DATEDIFF(dd,0,idate)) ='2013-08-25 00:00:00' 
UNION ALL 
SELECT 'csh' type, SUM(csh) Amount FROM sales     
    WHERE repId= 9000 AND DATEADD(dd,0,DATEDIFF(dd,0,idate)) ='2013-08-25 00:00:00' 
UNION ALL 
SELECT 'chk' type, SUM(chk) Amount FROM sales     
    WHERE repId= 9000 AND DATEADD(dd,0,DATEDIFF(dd,0,idate)) ='2013-08-25 00:00:00' 

,或者使用CTE:

;WITH CTE(atm,cc,csh,chk) AS 
    (SELECT SUM(atm),SUM(cc),SUM(csh),SUM(chk) FROM sales     
    WHERE repId= 9000 AND DATEADD(dd,0,DATEDIFF(dd,0,idate)) ='2013-08-25 00:00:00') 
SELECT 'atm' Type,atm Amount FROM CTE 
UNION ALL SELECT 'cc' ,cc FROM CTE 
UNION ALL SELECT 'csh',csh FROM CTE 
UNION ALL SELECT 'chk',chk FROM CTE 
+0

有什麼比使用UNION ALL更好的方法? –

+0

我不這麼認爲,但是當您使用Common Table Expression版本時,如上所示,三個'SELECT'確實會導致SQL Server的額外工作。理論上'UNION ALL'比'UNION'便宜',但在這個例子中總共有三行,你絕對不會注意到任何差異,所以在這種情況下,你也可以使用'UNION'。 – cars10m