查找行我有一個數據庫表結構如下(略去了不相關的字段):SQL:where字段值不同
rankings
------------------
(PK) indicator_id
(PK) alternative_id
(PK) analysis_id
rank
所有字段是一個整數;前三個(標有「(PK)」)是一個複合主鍵。一個給定的「分析」有多個「替代品」,每個「替代品」對於許多「指標」中的每一個都有「排名」。
我正在尋找一種有效的方法來比較任意數量的分析,其任何替代/指標組合的排名不同。因此,舉例來說,如果我們有這樣的數據:
analysis_id | alternative_id | indicator_id | rank
----------------------------------------------------
1 | 1 | 1 | 4
1 | 1 | 2 | 6
1 | 2 | 1 | 3
1 | 2 | 2 | 9
2 | 1 | 1 | 4
2 | 1 | 2 | 7
2 | 2 | 1 | 4
2 | 2 | 2 | 9
...那麼理想的方法將確定以下區別:
analysis_id | alternative_id | indicator_id | rank
----------------------------------------------------
1 | 1 | 2 | 6
2 | 1 | 2 | 7
1 | 2 | 1 | 3
2 | 2 | 1 | 4
我想出了一個查詢,做什麼,我想要的2個分析ID,但我無法將其推廣到找出任意數量的分析ID之間的差異(即用戶可能想要比較2,或5,或9等),並找到至少有一個分析的任何行不同於其他任何)。我的查詢是:
declare @analysisId1 int, @analysisId2 int;
select @analysisId1 = 1, @analysisId2 = 2;
select
r1.indicator_id,
r1.alternative_id,
r1.[rank] as Analysis1Rank,
r2.[rank] as Analysis2Rank
from rankings r1
inner join rankings r2
on r1.indicator_id = r2.indicator_id
and r1.alternative_id = r2.alternative_id
and r2.analysis_id = @analysisId2
where
r1.analysis_id = @analysisId1
and r1.[rank] != r2.[rank]
(它把分析的值到其他字段,而不是行,我認爲無論哪種方式是可行的。)
我怎麼能概括這個查詢要處理很多分析IDS? (或者,或者想出一個更好的查詢來完成這項工作?)我使用的是SQL Server 2005,以防萬一。
如果有必要,我總是可以將所有數據從表格中取出並查找代碼的差異,但是SQL解決方案會更可取,因爲我經常只關心幾千行中的幾行,並且沒有意義如果我能避免它們,將它們全部轉移。 (但是,如果你有一個令人信服的理由不在SQL中這麼做,那麼說 - 我認爲這也是一個好的答案!)
完美 - 無需臨時表即可完成此操作!謝謝! – 2009-06-05 17:18:28