Query
從同一個表中選擇兩個值但在不同的條件下
我想將一個表中的一個值抓取到兩個不同的列中,以獲得同一個表中的不同值。使用此查詢作為範例(注意選擇是如何在同一個表上別名為 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 ;