Query

從同一個表中選擇兩個值但在不同的條件下

  • November 4, 2015

我想將一個表中的一個值抓取到兩個不同的列中,以獲得同一個表中的不同值。使用此查詢作為範例(注意選擇是如何在同一個表上別名為 2 個不同的表):

SELECT a.myVal, b.myVal 
FROM MyTable a, MyTable b
WHERE 
 a.otherVal = 100 AND
 b.otherVal = 200 AND
 a.id = b.id

當我在我的數據集上執行這樣一個相對簡單的查詢時,它可以工作 - 只需要很長時間。是否有更好/更智能的方式來編寫此查詢?

為了便於閱讀,我將使用更現代的連接語法重寫查詢。這將清楚地將您的加入條件與過濾器分開。

select a.myVal,
      b.myVal
 from MyTable a
 join MyTable b on b.id = a.id
where a.OtherVal = 100
 and b.Otherval = 200

為了提高性能,請確保您有正確的索引。在這個有限的範例中,理想情況下,您將在 ID 上有一個聚集索引,在 OtherVal 上有一個非聚集索引。

但是,在查看您的查詢後,我無法說出您要完成的工作。

您可以使用分組和條件聚合,如下所示:

SELECT
 id,
 MAX(CASE OtherVal WHEN 100 THEN MyVal END) AS MyVal1,
 MAX(CASE OtherVal WHEN 200 THEN MyVal END) AS MyVal2
FROM MyTable
WHERE OtherVal IN (100, 200)
GROUP BY
 id
;

引用自:https://dba.stackexchange.com/questions/24233