2017-09-08 25 views
0

ストアロケーション(store_ID)で購入した単一のアイテム(store_Product)を示すレポートを作成しようとしています。SQL重複レコードを条件に基づいた値で置き換えます。

store_Product:product_A、product_B、product_Cの3種類があります。 一意のstore_IDが1000を超えています。

私の問題は、いくつかのユニークなSTORE_IDが複数store_Productsを持っており、それが唯一のユニークなstore_IDsを返しますので、私はこれらの条件の規則である

クエリを縮小する必要があるということです

:ストアはproduct_Bを持っている場合

  • 一意のstore_IDレコードがstore_Product値としてproduct_Bを持つ

  • ストアにproduct_Aとproduct_Cがある場合、1つの一意のstore_IDレコードはstore_Productとしてproduct_Aを持ちますv alue

  • ストアにレコードが1つしかない場合、store_Productは変更されません。

ので、以下の例では、私が左と私はそれが右に見えるようにしたいの上に持っているものを説明します。

enter image description here

私はSSRSでレポートを作成するSQLサーバー2014を使用しています。

本当に助けていただきありがとうございます。

編集:私はこれまで持っているもの:

SELECT [store_ID] 
    ,MIN(CASE WHEN store_product = 'product_B' THEN '1_product_B' 
     WHEN store_product = 'product_A' THEN '2_product_A' 
     ELSE '3_product_C' END) AS 'Prob_Group' 
    ,CASE 
    WHEN (DATEDIFF(MINUTE, Opened_Time, GETDATE())) * 1.0/60 < '24' 
     THEN '0 - 24 HRs' 
    WHEN (DATEDIFF(MINUTE, Opened_Time, GETDATE())) * 1.0/60 >= '24' 
     AND (DATEDIFF(MINUTE, Opened_Time, GETDATE())) * 1.0/60 < '48' 
     THEN '24 - 48 HRs' 
    WHEN (DATEDIFF(MINUTE, Opened_Time, GETDATE())) * 1.0/60 >= '48' 
     AND (DATEDIFF(MINUTE, Opened_Time, GETDATE())) * 1.0/60 < '72' 
     THEN '48 - 72 HRs' 

     ELSE 'Over 168 HRs' 

     END AS 'Hour_Range' 
FROM myTable 
WHERE *filters* 
GROUP BY [store_ID] 
     ,CASE 
     WHEN (DATEDIFF(MINUTE, Opened_Time, GETDATE())) * 1.0/60 < '24' 
      THEN '0 - 24 HRs' 
     WHEN (DATEDIFF(MINUTE, Opened_Time, GETDATE())) * 1.0/60 >= '24' 
      AND (DATEDIFF(MINUTE, Opened_Time, GETDATE())) * 1.0/60 < '48' 
      THEN '24 - 48 HRs' 
     WHEN (DATEDIFF(MINUTE, Opened_Time, GETDATE())) * 1.0/60 >= '48' 
      AND (DATEDIFF(MINUTE, Opened_Time, GETDATE())) * 1.0/60 < '72' 
      THEN '48 - 72 HRs' 
      ELSE 'Over 168 HRs' 
      END  
ORDER BY [store_ID] 
+0

を削除することができます。これは始めるのに最適な場所です。 http://spaghettidba.com/2015/04/24/how-to-post-a-t-sql-question-on-a-public-forum/ –

+0

dbスキーマ、サンプルデータ、現在および予想される出力を表示します。 \t [** How-to-Ask **](http://stackoverflow.com/help/how-to-ask) \t \t [**スタート**] (http://spaghettidba.com/2015/04/24/how-to-post-at-sql-question-on-a-public-forum/)質問品質を改善し、より良い回答を得る方法を学ぶことができます。 \t [**最小限の完全かつ検証可能なサンプルを作成する方法**](http:// stackoverflow。com/help/mcve) –

+0

@JuanCarlosOropezaメインポストに私のコードを追加しましたが、下半分はコードフォーマットにとどまらないでしょう。 私のサンプルデータは、時間範囲のcase文が含まれている場合にのみ、store_IDの重複を返します。私はテストせずに、それは正常に動作します。 正しい方向に手伝ってください。私は非常に感謝します –

答えて

0

私はここに非常に卑劣されています:

SELECT store_id, 
     MIN(CASE WHEN store_Product = "product_B" THEN "1_product_B" 
       WHEN store_Product = "product_A" THEN "2_product_A" 
       ELSE "3_product_C" 
      END) as Product 
FROM YourTable 
GROUP BY store_id 

だから、店がproduct_Bを持っている場合、結果は1_product_Bだろう、あれば問題はありませproduct_Aおよびproduct_Cである。 2_product_A3_product_C間の最小product_Bない場合は、同じ

product_Aを持っている場合も動作します2_product_Aです。

あなたは結果を持っていた後、あなたは我々がここでは詳細のいくつかの種類を必要とする最初の2つの文字

WITH cte as (
    SELECT store_id, 
      MIN(CASE WHEN store_Product = "product_B" THEN "1_product_B" 
        WHEN store_Product = "product_A" THEN "2_product_A" 
        ELSE "3_product_C" 
       END) as Product 
    FROM yourTable 
    GROUP BY store_id 
) 
SELECT store_id, RIGHT(Product, LEN(Product) - 2) AS fixProductName 
FROM CTE 
+0

ありがとうございました!私は1つの詳細について言及することを忘れていた、私はまた、購入時に基づいて時間範囲を決定するケースステートメントである別の列を持っています。 だから私はこのケース・ステートメントをグループ・ミーにも含めなければなりません。これは私に重複を得る原因となっています。ここに私がこれまで持っているものは次のとおりです: –

+0

私はメインの投稿に自分のコードを追加しました。コメントが長すぎるから –

+1

これが起こると私は嫌です。あなたは質問に答えようと努力していましたが、それは本当に始まるべき質問でもありませんでした:(\ –

関連する問題