[英]SQL - Comparing Multiple Rows in Query
我有一個零售軟件的價格表,其中包含一個商品的UPC,一個屬性代碼(即“ REGULAR_PRICE,PROMO_PRICE”)和一個價格。
示例表:
400000320243 REGULAR_PRICE 80
400000320243 PROMO_PRICE 80
400000320250 REGULAR_PRICE 50
400000320250 PROMO_PRICE 40
我正在嘗試編寫查詢以查找任何UPC的PROMO_PRICE = REGULAR_PRICE,並輸出保持此條件的UPC列表。
我無法弄清楚如何在SQL中編寫它。 我正在使用SQL Server 2008 R2。
嘗試偽代碼:
for each upc:
if upc.regular_price = upc.promo_price:
print upc
假設您的表名為Pricing
並且您有名為upc
, propertycode
和price
,則可以對此數據執行自聯接。 它看起來像:
SELECT Reg.upc
FROM Pricing Reg JOIN Pricing Promo ON Reg.upc = Promo.upc
WHERE Reg.propertycode = 'REGULAR_PRICE'
AND Promo.propertycode = 'PROMO_PRICE'
AND Reg.price = Promo.price
INTERSECT查詢也可以在這里工作:
SELECT upc, price
FROM atable
WHERE property_code = 'REGULAR_PRICE'
INTERSECT
SELECT upc, price
FROM atable
WHERE property_code = 'PROMO_PRICE'
;
SQL Fiddle Demo (使用@Beth的架構)。
另外...根據您的示例判斷-對我來說就像一張表-如果您的SQL版本中可用,則可以使用LAG()/ LEAD()分析函數來比較數據-上一行或下一行與當前行值。 。
帶有EXISTS子查詢的選項
SELECT *
FROM dbo.test3 t1
WHERE EXISTS (
SELECT 1
FROM dbo.test3 t2
WHERE t2.PriceName = CASE WHEN t1.PriceName = 'PROMO_PRICE' THEN 'REGULAR_PRICE'
WHEN t1.PriceName = 'REGULAR_PRICE' THEN 'PROMO_PRICE' END
AND t1.Price = t2.Price
)
在SQLFiddle上演示
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.