2017-07-06 5 views
1

内部選択クエリを含む一種の大きなクエリがあります。私の目的は、すべてのレコードをフィールドコールの製品番号(一意ではなく、複数回表示される)でグループ化してから、日付でグループ化することです。2つの選択クエリの(名前)と(日付)によるグループ化

クエリの最後にOrder By日付を追加して正常に動作しているようです。クエリは、日付順にすべてのレコードを生成しましたが、レコードはProductNumberでグループ化されませんでした。ここで

データの視覚的なサンプルが、私はどのように私は列フィールドでグループ(ProductNumberだろう、出力はしたがって、次の

ProductId Manufacturer  ProductNumber  Date 
1   Kellog    H1   05/05/2017 
5   Nestle    H1   05/01/2017 
8   Nutmeg    H1   04/30/2017 
10   Houston    H1   04/15/2017 
9   Highland    H3   04/09/2017 
11   Miami     H3   04/12/2017 

のように見えるように取得しようとしています

ProductId Manufacturer  ProductNumber  Date 
1   Kellog    H1   05/05/2017 
5   Nestle    H1   05/01/2017 
8   Nutmeg    H1   04/30/2017 
9   Highland    H3   04/09/2017 
10   Houston    H1   04/15/2017 
11   Miami     H3   04/12/2017 

です)をグループ化し、日付順に並べ替えますか? このクエリでは、Order by Dateを追加しました。グループをProductNumberで追加すると、内部選択のすべてのフィールドをグループに追加するかどうかを尋ねるエラーメッセージが表示されます。自分のグループの選択で、実際にすべてのフィールド(実際のクエリには多くのフィールドがあります)が本当に必要ですか?よりよい解決策が必要です。ここで

は、私のクエリ(ちょうどサンプルが)あなたが本当に注文された「グループ化」と呼んでいる何

SELECT DISTINCT TOP 100 *, 
FROM (SELECT DISTINCT NP.ManufacuturerId, 
         C.ManufacuturerName, 
         IR2.ProductNumber, 
         NP.Field1, 
         NP.Field2, 
         NP.Field3, 
         NP.Field4, 
         CN.C2Date      CN.CompanyNotificationId, 
         NPR.NotificationProcessName, 
         Cast(NP.CompanyId AS VARCHAR(15)) 
         + NPR.NotificationProcessName AS 'CompanyIdAndProcess', 
         CC.UserId, 
         NT.NotificationTypeName, 
         CC.EmailAddress, 
         IsRegistered = CASE 
             WHEN C.IsRegistered = 1 THEN 'Yes' 
             ELSE 'No' 
             END, 
     FROM ProductDetails NP 
       INNER JOIN Manufactuers C 
         ON C.ManufacuturerId = NP.ManufacturerId) Q 
ORDER BY CN.C2DateDESC; 
+0

'11マイアミH3 4月12日/ 2017'日05/05/2017''だった場合、結果は何でしょうか? –

+0

は、商品番号ごとにグループ化し、選択クエリ内の他の列を選択すると集計されるべきではないという論理はありませんか? max、AvgなどのSQLには異なる集約関数があります。これらの関数は、要件に応じて選択クエリで使用することも、それらの列でグループ化することもできます。 –

答えて

3

今のところです。

製品番号、日付。

私はあなたの問題はあなたがグループ化されたデータ内に含まれているフィールドで注文しようとしているということで、常に同じ、例はないと思う
1

1  Kellog   H1   05/05/2017 
5  Nestle   H1   05/01/2017 

をグループ場合ProductNumberによって後日付順に並べ替えるグループは、データベースエンジンが注文する値(5月5日か5月1日か)を知らない可能性が非常に高いです。ですから、あなたがする必要があるのは、グループ化するときに使用する値を指定することです(たとえば、MAXまたはMIN関数を使用して)。

クイックサンプル:

SELECT Count(*) AS Products, ProductNumber, MAX(Date) AS maxdate 
FROM  Table 
GROUP BY ProductNumber 
ORDER BY maxdate; 
関連する問題