2014-03-28 34 views
0

我有這個疑問:如何在sql的不同列中添加月份名稱?

DECLARE @month INT 
SET @month=1 

SELECT 

    CLOI_ClientOrderItems.cl_Id, 

    NoOfInv = SUM(CASE WHEN DATEPART(mm, in_date_issued) <= @month 
         AND DATEPART(yyyy, in_date_issued) = 2014 
         THEN 1 ELSE 0 END), 

    MonthTotal = SUM(CASE WHEN DATEPART(mm, in_date_issued) <= @month 
          AND DATEPART(yyyy, in_date_issued) = 2014 
          THEN in_total ELSE 0 END), 

    Grandtotal = SUM(in_total), 

    RemainingAmount = SUM(in_total) - SUM(CASE 
          WHEN DATEPART(mm, in_date_issued) <= @month 
          THEN in_total ELSE 0 END) 


FROM (SELECT 
      DISTINCT MasterOrderId, cl_Id 
     FROM 
      CLOI_ClientOrderItems) as CLOI_ClientOrderItems 

INNER JOIN 
     IN_Invoices 
ON 
     IN_Invoices.MasterOrderId = CLOI_ClientOrderItems.MasterOrderId 
GROUP BY 
     CLOI_ClientOrderItems.cl_id 

如果我通過數月的3一樣,它應該顯示它像一月二月和三月,並在各自的一個月相關記錄。 SQL

輸出,我想這樣的:

noofinv amt clid   grandtotal  jan  feb  march remainingamt 
5   7.00 100000_Pri  245.00   0.00  238.00  7.00  238.00 
12  2510.12 100001_pro 181110.29 138891.92 39708.25 2510.12 178600.17 
+0

的可能重複[如何在SQL的不同列顯示月份名稱?](http://stackoverflow.com/questions/22704247/how-to-display-month-name-in-different-columns-in-sql) –

回答

0

你是什麼意思時,你說你的顯示? 這是一個返回非所有類型日期值的查詢 - 所以在哪個月應該得到int?

在DB中的日期被存儲爲二進制對象 - 所以遷移日期顯示爲文本是在日期不同,則運行的計算。 您可以使用DATENAME爲: http://msdn.microsoft.com/en-us/library/ms174395.aspx

DATEPART - 只是讓你拿出日期的各個部分。 http://msdn.microsoft.com/en-us/library/ms174420.aspx

當時我收來回答你問什麼?


如果我理解正確 - 您要創建一個動態查詢,它將執行並返回結果。 因此,第一部分 - 將您的查詢更改爲字符串,而不是代碼中的查詢。

SET @SQLQuery = 'SELECT prev_col ,' 

現在 - 串聯你想要的列在一個循環

DECLARE @i AS SMALLINT 
SET @i=1; 
WHILE (@i <= month) 
BEGIN 
    @SQLQuery = SQLQuery + 'RemainingAmount = SUM(in_total) - SUM(CASE '+ 
          'WHEN DATEPART(mm, in_date_issued) = ' + CONVERT(VARCHAR,@month)+ 
          'THEN in_total ELSE 0 END) AS ' + 
          DATENAME(month, DATEADD(month, @month, CAST('2008-01-01' AS datetime))) 
          +', '; 
    @[email protected]+1; 
END 
@SQLQuery = @SQLQuery + ' .... col >'+ CONVERT(VARCHAR,@month) + ' AS remaining' 
@SQLQuery = @SQLQuery + ' from ..... where .....'; 

後來 - 只是執行:再次

EXECUTE(@SQLQuery); 

- 我沒有一臺機器進行調試 - 並使其漂亮...... 但我認爲這應該是足以讓你明白我的意思...

+0

我在IN_Invoices日期列表從那裏我找到日期和disply月份名稱在不同的列與該月的各自記錄 – user3445262

+0

這不是在查詢呈現...您可以發佈完整的查詢,與輸入參數的完整定義?或至少一個完整的查詢與有效的語法 - 我可以在我的機器上運行,並試圖確保我回答你的問題? 如果要顯示你的應用程序中的數據 - 這是不是在所有查詢相關的,它是編程語言,決定如何顯示它... – evenro

+0

無論我把thatis完整查詢 – user3445262