2016-08-12 153 views
1

我有這個表中的SQL Server:SQL服務器:盤點交易

table

我想這樣

enter image description here

我會寫SQL查詢來算結果交易和每月合併。

預先感謝您。

+0

是你的'TXN日期'列'varchar'或'日期'類型? – ughai

+0

TXN日期列是一個int類型 –

+0

將它除以100並使用'group by'像這樣'SELECT TXNDate/100,COUNT(*)FROM Table1 GROUP BY TXNDate/100' – ughai

回答

1

首先,您需要編輯要分組的列。

SELECT 
    A.YYYYMM, 
    COUNT(*) TxnCount 
FROM 
(
    SELECT 
     *, 
     LEFT(TXN_DATE, 6) YYYYMM 
    FROM 
     Tbl 
) A 
GROUP BY 
    A.YYYYMM 
+0

是的,這應該工作,即使如此 – NEER

+1

美妙,今天學到了一些新東西。總是認爲'LEFT'是'char'類型特定的:) – ughai

+0

原來[LEFT](https://msdn.microsoft.com/en-in/library/ms177601.aspx)將'int'轉換爲'char' – ughai

0

您可以使用GROUP BY子句來計算事務。 假設你TXN Datedate類型的,你可以用下面的查詢:

SELECT CONVERT(VARCHAR(6), TXN_DATE, 112) AS YYYYMM, COUNT(*) AS TXN_COUNT 
FROM  MyTable 
GROUP BY CONVERT(VARCHAR(6), TXN_DATE, 112) 
ORDER BY CONVERT(VARCHAR(6), TXN_DATE, 112) 

編輯:既然你TXN_DATEint類型,可以使用以下

SELECT LEFT(CONVERT(VARCHAR, TXN_DATE), 6) AS YYYYMM, COUNT(*) AS TXN_COUNT 
FROM  MyTable 
GROUP BY LEFT(CONVERT(VARCHAR, TXN_DATE), 6) 
ORDER BY LEFT(CONVERT(VARCHAR, TXN_DATE), 6) 
+0

TXN日期列是一個int類型 – ughai

+0

更新了我的回答 – rcs

0

使用集團通過子串

SELECT 
    SUBSTRING(CAST(TXNDate AS VARCHAR(12)),0,9) AS TXNDate,COUNT(*) AS 'TXN Count' 
FROM 
@tblTest 
GROUP BY SUBSTRING(CAST(TXNDate AS VARCHAR(12)),0,9) 
+0

TXN日期列是一個int型 – ughai

+0

好吧,讓我再試那種類型 –

+0

我已更新現在檢查 –