2017-09-07 61 views
0

我試圖創建一個顯示由商店位置(store_ID)購買的物品數量(store_Product)的報表。用一個自定義值記錄替換重複值記錄的SQL過濾器

我的問題是,當一個獨立的商店位置同時購買product_a和product_b時,我需要該報表顯示store_ID爲store_ID的一條記錄,並將store_roduct顯示爲「product_A」,而不是具有相同store_ID的兩條記錄以及product_A和product_B 。 但是,如果不同的商店位置僅購買product_A或product_B(但不是兩者),則它會顯示該商店ID的一個記錄以及它現在通常所購買的商品。

左邊是什麼,我現在越來越和右邊就是我想要的結果看起來像:

enter image description here

我怎樣才能實現這個結果?

謝謝!

+0

啊?你能給我們輸出預期的結果嗎? – Dalorzo

+0

你到目前爲止嘗試過什麼? –

+0

@Dororzo我在主帖中添加了一個預期的輸出圖像。 –

回答

1

在Microsoft SQL Server,您可以通過使用CTE實現這一點:

CREATE TABLE #temp (
    store_id int, 
    store_product varchar(25) 
) 

INSERT INTO #temp 
    VALUES (100, 'product_A') 
    , (100, 'product_B') 
    , (200, 'product_B') 
    , (300, 'product_A') 
    , (400, 'product_B') 
    , (400, 'product_A') 


;WITH cte 
AS (SELECT 
    *, 
    ROW_NUMBER() OVER (PARTITION BY store_id ORDER BY store_id, store_product) AS rn 
FROM #temp) 
SELECT 
    store_id , store_product 
FROM cte 
WHERE rn = 1 

DROP TABLE #temp 
+0

非常感謝你的幫助!所以這是我的錯,但我忘了提及除product_A和product_B之外還有store_product值。 當存在重複的store_ID時,此查詢正在將其他store_products(如product_C)更改爲product_A。 我只需要重複的商店編號與單個記錄被替換如果兩個副本是「PRODUCT_A」和「product_B」 如果有與讓說,「PRODUCT_A」和「product_D」重複STORE_ID話,我想都記錄顯示向上。對不起,我希望你能幫上忙。謝謝! –

1
select store_id, min(store_product) as store_product 
from table_name 
group by store_id; 

...它的另一個鬼把戲,將與樣本數據的工作;)

0

在評論到您正在糾正您的請求的答案。當同一商店也有product_A時,您想要抑制product_B。所有其他行應保留在結果中。至少這是我現在的理解。實現這一

一種方法是用一個NOT IN(或NOT EXISTS)子句:

select 
    store_id, 
    store_product 
from mytable 
where store_product <> 'product_B' 
    or store_id not in (select store_id from mytable where store_product = 'product_A'); 

,或者如果您發現更具可讀性:

select 
    store_id, 
    store_product 
from mytable 
where not 
(
    store_product = 'product_B' and 
    store_id in (select store_id from mytable where store_product = 'product_A') 
); 
+0

謝謝你的回覆!當同一個store_ID也有product_A時,我想用product_A替換product_B,而不是將其淘汰。我相信你的方法只是從計數的角度移除product_B,而用product_A替換,計數將保持不變,剛纔改成product_A類別。 如果發生以下情況,則不做任何更改: 商店僅有(其中一個)product_B或product_A或product_C; 或者當商店同時擁有product_C和product_A時; 或當商店有product_C和product_B; 當商店有product_A和product_B時,只有這樣,product_B將替換爲product_A –

+0

查詢列出所有商店和產品。沒有計數。當商店同時擁有product_A和product_B時,product_B不顯示。這似乎符合你的要求。您尚未提及的唯一情況是商店有product_A和product_B以及product_C。我會顯示product_A和product_C,因爲商店同時具有product_A和product_B,因此只顯示product_A。這與你想要的不同嗎?你有沒有試過其中一個查詢?結果與您正在查找的結果有何不同?如果是這樣,怎麼樣? –

+0

同樣,我不希望它「未顯示」。相反,我希望它顯示兩個product_A實例。因此,當商店同時具有product_A和product_B時,product_B會更改爲product_A,因此該商店有兩個product_A計數,而不是一個product_A和一個product_B –