SQL-比较查询中的多行
我有一个零售软件的定价表,其中包含商品的UPC、属性代码(即“常规价格、促销价格”)和价格 示例表:SQL-比较查询中的多行,sql,sql-server,sql-server-2008-r2,Sql,Sql Server,Sql Server 2008 R2,我有一个零售软件的定价表,其中包含商品的UPC、属性代码(即“常规价格、促销价格”)和价格 示例表: 400000320243 REGULAR_PRICE 80 400000320243 PROMO_PRICE 80 400000320250 REGULAR_PRICE 50 400000320250 PROMO_PRICE 40 我正在尝试编写一个查询,以查找任何UPC的促销价格=常规价格的位置,并输出一个符合此条件的UPC列表 我不知道如何用SQL写这个。我正在使用SQLServer200
400000320243 REGULAR_PRICE 80
400000320243 PROMO_PRICE 80
400000320250 REGULAR_PRICE 50
400000320250 PROMO_PRICE 40
我正在尝试编写一个查询,以查找任何UPC的促销价格=常规价格的位置,并输出一个符合此条件的UPC列表
我不知道如何用SQL写这个。我正在使用SQLServer2008R2
尝试的伪代码:
for each upc:
if upc.regular_price = upc.promo_price:
print upc
你可以用很多方法。一种方法是创建两个集合,一个包含UPC和常规价格,另一个包含UPC和促销价格,并将这两个集合连接起来,如下所示:
select r.upc, r.price from
(select upc, price from t where propertyCode = 'regular_price') r inner join
(select upc, price from t where propertyCode = 'promo_price') p on
r.upc = p.upc and
r.price = p.price
你可以试穿一下 假设您的表名为
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
此外。。。根据您的示例判断-在我看来像一个表-您可以使用LAG()/LEAD()分析函数(如果您的SQL版本中可用)来比较数据-上一行或下一行与当前行值…选项与 在上演示查询也将在此处工作:
SELECT upc, price
FROM atable
WHERE property_code = 'REGULAR_PRICE'
INTERSECT
SELECT upc, price
FROM atable
WHERE property_code = 'PROMO_PRICE'
;
(使用@Beth的模式)。promo和regular在不同的表中吗?不,它们在同一个表中。仅供参考,SQLServer2012中提供的LAG()/LEAD()分析函数我认为不会在MS Sql Server 2008 R2上运行。什么是
使用的?可以这样修复:@zespri啊,是的。我没有意识到MS SQL Server没有使用构造。这是equi连接()的简化语法。我将编辑我的问题,将其添加进去。非常感谢您的回复。这就是我要找的!
SELECT upc, price
FROM atable
WHERE property_code = 'REGULAR_PRICE'
INTERSECT
SELECT upc, price
FROM atable
WHERE property_code = 'PROMO_PRICE'
;