2012-02-20 3 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 

РЕЗУЛЬТАТ:

2/17/2012 появляется три раза, потому что она имеет разные времена ...

ответ

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

Поскольку вы хотите отобразить только один результат, почему бы вам не использовать DISTINCT?

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

Попробуйте использовать CHAR (10) вместо varchar при применении вашего конвертирования. Вы никогда не должны объявлять char/varchar без длины. В этом случае вы не усекаете достаточно символов, потому что это varchar (30), тогда как вы действительно заботитесь только о первых 10 персонажах. Кроме того, ваша группа должна включать идентичный конвертер.

2

Проще говоря, ваша GROUP BY должна появиться где-то в вашем выборе. Вы уже конвертируете TransactionDate в строку «date only», хотя DATEADD и DATEDIFF вместе фактически эффективнее.

Следовательно, просто GROUP BY тот же формат:

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