SQL Server 用于从存储在同一表中不同行的两个值中选择较大值的查询

n7taea2i  于 2023-01-08  发布在  其他
关注(0)|答案(4)|浏览(159)

我有一个名为“详细信息”的下表:
| 店铺_编号|参考编号|价值|
| - ------|- ------|- ------|
| 二二二二二二|四十八|二十六万三千九百元|
| 二二二二二二|五十四|七十二万一千四百元|
| 二二二二二三|四十八|一百二十五|
| 二二二二二三|五十四|八十二九百元|
| 小行星22224|四十八|三十二万九千八百元|
| 小行星22224|五十四|二十八万二百元|
我希望查找/选择reference_number 48的值大于reference_number 54的值的所有商店编号记录,因此我希望从查询返回222223和222224。
我觉得应该用HAVING子句来完成,但是我不太确定在这种情况下如何使用它。可能还建议在选择查询中使用连接同一个表。

rhfm7lfc

rhfm7lfc1#

是的,您可以为此使用HAVING

SELECT Shop_number
FROM   Details
GROUP  BY Shop_number
HAVING MAX(CASE WHEN Reference_number = 48 THEN Value END) > 
       MAX(CASE WHEN Reference_number = 54 THEN Value END)
b4lqfgs4

b4lqfgs42#

另一种方法,正如您在自连接中提到的:

SELECT a.Shop_number, a.Value AS Value48, b.Value as Value54
FROM details a
INNER JOIN details b 
  ON a.Shop_number = b.Shop_number 
   AND a.Reference_number = 48 
   AND b.Reference_number = 54
WHERE a.Value > b.Value
jecbmhm3

jecbmhm33#

使用透视聚合方法:

SELECT Shop_number
FROM Details
GROUP BY Shop_number
HAVING MAX(CASE WHEN Reference_number = 48 THEN Value END) >
       MAX(CASE WHEN Reference_number = 54 THEN Value END);
cyvaqqii

cyvaqqii4#

或者您可以通过子查询检查其他值:

SELECT DISTINCT Shop_number
FROM Details d1
WHERE Reference_number=48
  AND Value > (
    select top 1 Value 
    from Details 
    where Shop_number=d1.Shop_number
      and Reference_number=54
  )

相关问题