2016-11-05 139 views
0

我的選擇查詢:交叉表SQL Server查詢

SELECT  
    COUNT(*) * 500 AS TotalFee, 
    ISNULL(Employee.EFName, '') + ' ' + ISNULL(Employee.EMName, '') + ' ' + ISNULL(Employee.ELName, '') as Name, 
    CAST(MONTH(sdatetime) AS int) as Months 
FROM    
    Patient_Services 
INNER JOIN 
    Employee ON Patient_Services.Doctor_ID = Employee.EmpID 
WHERE 
    (Patient_Services.S_ID = 1606) 
    AND CAST(MONTH(sdatetime) AS INT) BETWEEN 1 AND 6 
GROUP BY 
    CAST(MONTH(sdatetime) AS INT), Employee.EFName, Employee.EMName, Employee.ELName 
ORDER BY 
    CAST(MONTH(Patient_Services.sdatetime) AS INT) 

結果

TotalFee |  Name  | Months 
38000  | AKIF DILSHAD |  1 
1500  | MATEEN AKRAM |  1 
1500  | AKIF DILSHAD |  2 
2200  | AKIF DILSHAD |  3 
1500  | NASERA BHATTI |  4 
500   | NASERA BHATTI |  5 
500   | NASERA BHATTI |  6 
12000  | AKIF DILSHAD |  6 

我想要的結果:

Name   |Jan  |Feb |Mar |Apr |May |June |Total |60% |40% 
AKIF DILSHAD |38000 |1500 |2200 |0  |0  |12000 |53700 |32220 |21480 
MATEEN AKRAM |1500 |0  |0  |0  |0  |0  |1500 |900 |600 
NASERA BHATTI |0  |0  |0  |1500 |500 |500 |2500 |1500 |1000 

請幫我查詢來獲取我想要的結果轉換。

+0

你不是應該按名稱以及分組? –

+0

你應該使用[Pivot](http://stackoverflow.com/questions/15931607/convert-rows-to-columns-using-pivot-in-sql-server) – NEER

+0

MONTH()'函數**已經* *返回一個「INT」 - 絕對沒有理由也沒有必要明確地將其轉換爲「INT」... –

回答

0

請試試這個:

WITH cte as(
SELECT  COUNT(*)*500 AS TotalFee, ISNULL(Employee.EFName,'') +' '+ ISNULL(Employee.EMName,'') +' '+ ISNULL(Employee.ELName,'') as Name,CAST(MONTH(sdatetime) AS int) as Months 
FROM   Patient_Services INNER JOIN 
         Employee ON Patient_Services.Doctor_ID = Employee.EmpID 
WHERE  (Patient_Services.S_ID = 1606) AND CAST(MONTH(sdatetime) AS int) Between 1 AND 6 
GROUP BY CAST(MONTH(sdatetime) AS int),Employee.EFName, Employee.EMName, Employee.ELName 
--order by CAST(MONTH(Patient_Services.sdatetime) AS int) 
) 

    SELECT [NAME], 
     SUM(CASE Months WHEN 1 THEN TotalFee ELSE 0 End) as 'Jan' , 
     SUM(CASE Months WHEN 2 THEN TotalFee ELSE 0 End) as 'Feb' , 
     SUM(CASE Months WHEN 3 THEN TotalFee ELSE 0 End) as 'Mar' , 
     SUM(CASE Months WHEN 4 THEN TotalFee ELSE 0 End) as 'Apr' , 
     SUM(CASE Months WHEN 5 THEN TotalFee ELSE 0 End) as 'May' , 
     SUM(CASE Months WHEN 6 THEN TotalFee ELSE 0 End) as 'Jun' , 
     SUM(TotalFee) AS Total, 
     SUM(TotalFee)*.6 as [60%], 
     SUM(TotalFee)*.4 as [40%] 
     FROM CTE 
     GROUP BY [Name] 
+0

謝謝艾哈邁德賽義德。非常感謝。 –

+0

我想問你那個視圖只有那些通過哪個月的條件。如果我通過startmonth = 2和endMonth = 7比只顯示2到7個月。 –

+0

如果您傳遞2到7,那麼Jan將顯示零並且7月不會顯示爲單獨的月份,但會包含在總計列中。爲了顯示任何月份,您要麼複製所有12個月的SUM/CASE語句,要麼將查詢轉換爲動態查詢。對於動態查詢,請準備好動態PIVOT。 –