我正在尝试创建一个报告,显示按商店位置(store_ID)购买的单个商品(store_Product)。
总共有3种类型的商品:product_A,product_B和product_C。 有超过一千个唯一的store_ID。
我的问题是一些唯一的store_ID有多个store_Products,我需要缩小查询,以便它只返回唯一的store_IDs
这些是条件规则:
如果商店有product_B和任何其他产品,则一个唯一的store_ID记录会将product_B作为store_Product值
如果商店有product_A和product_C,则一个唯一的store_ID记录会将product_A作为store_Product值
如果商店只有一条记录,那么store_Product保持不变。
所以下面的例子解释了我在左边的内容以及我想在右边看到的内容:
我正在使用SQL Server 2014在SSRS中构建报告。
非常感谢任何帮助!
编辑:到目前为止: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 :(得分: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
。
如果不是product_B
,则2_product_A
和3_product_C
之间的最小值2_product_A
相同,如果只有product_A
,也会有效。
获得结果后,您可以删除前两个字符
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