2012-02-20 17 views
4

SQL Serverでグループ化に問題があります。SQL Serverでグループ化するグループ

私はdatetime列を持っているが、私は日付のみでグループ化したい、

は、ここに私のコード

SELECT ProductCode, 
     ProductName, 
     ProductType, 
     UnitPrice,QTY, 
     Amount, 
     (convert(varchar, TransactionDate, 101))AS sTransactionDate 
FROM DailyTransactions 
GROUP BY TransactionDate, ProductCode, 
      ProductName,ProductType,UnitPrice,QTY,Amount 

RESULTです:それは異なる時間を持っているので

2/17/2012が3回表示されます...

答えて

2

これは、日付によって検索結果をグループ化する簡単な方法でなければなりません:

SELECT 
    ProductCode,ProductName,ProductType,UnitPrice,QTY,Amount,(convert(varchar, TransactionDate, 101))AS sTransactionDate 
    FROM DailyTransactions 
    GROUP BY DATEADD(day, DATEDIFF(day, 0, TransactionDate), 0), ProductCode,ProductName,ProductType,UnitPrice,QTY,Amount 

この場合、我々は日中一日の始まりと時間との差を取得し、それを削除しています。

2

お試しください。

GROUP BY 
    DATEPART(year, TransactionDate), 
    DATEPART(month, TransactionDate), 
    DATEPART(day, TransactionDate) 
2

1つの結果しか表示しないため、DISTINCTを使用しないでください。

SELECT DISTINCT ProductCode, ... 
FROM ... 
GROUP BY ProductCode 
1

変換を適用するときにvarcharの代わりにCHAR(10)を使用してみてください。長さのないchar/varcharを宣言してはいけません。この場合、varchar(30)なので十分な文字は切り捨てられませんが、最初の10文字は本当に気になります。また、あなたのグループには同じ変換が含まれている必要があります。

2

簡単に言えば、GROUP BYは選択した場所のどこかに表示する必要があります。 TransactionDateを「日付のみ」の文字列に変換していますが、DATEADDとDATEDIFFを合わせると効率的です。したがって

、同じフォーマットで単にグループ:

SELECT ProductCode, 
     ProductName, 
     ProductType, 
     UnitPrice,QTY, 
     Amount, 
     DATEADD(day, DATEDIFF(day, 0, TransactionDate), 0) AS sTransactionDate 
FROM DailyTransactions 
GROUP BY DATEADD(day, DATEDIFF(day, 0, TransactionDate), 0), ProductCode, 
      ProductName,ProductType,UnitPrice,QTY,Amount 
関連する問題