2011-08-17 31 views
-2

我有一個查詢返回每個國家的一行數據以及其他相關信息。查詢(與一切不相關刪除)看起來像這樣:確定連接中的行是奇數還是偶數在SQL Server中

ID User  Country  RowNumber 
    8 testtest BANGLADESH 1 
    14 testtest ANGOLA  2 
    14 testtest AUSTRALIA 3 
    14 testtest BANGLADESH 4 
    15 testera1 BELIZE  5 
    15 testera1 CONGO  6 

不過,我需要返回的每一個0或1:

SELECT a.*, ROW_NUMBER() OVER(ORDER BY a.DateSubmitted) As RowNumber, c.CountryName FROM  Table1 a 
inner join Table2 b 
on a.id = b.id 
inner join Table3 c on c.countrycode = b.countrycode 

這對於每一行,像這樣返回的行數獨特的ID而不是我已經擁有的主要聲明中的每一行。所以我想有如下:

ID User  Country  RowNumber 
    8 testtest BANGLADESH 0 
    14 testtest ANGOLA  1 
    14 testtest AUSTRALIA 1 
    14 testtest BANGLADESH 1 
    15 testera1 BELIZE  0 
    15 testera1 CONGO  0 

我在SQL相當薄弱的,我終於有意識地試圖改善它,所以我非常感謝你的幫助。

+0

你想要的輸出沒有意義。你可以解釋嗎? – JNK

+0

他希望交替0,1,0,1,0,1爲每個不同的ID,據我所知... – MatBailie

+0

好吧,也許列號標題的行號不清楚,因爲這不是真的我是什麼尋找。我期待的是在基於父記錄的報告上替代行顏色,而不是Country或RowNumber。所以我需要的是一個在報告中觸發的指標,但我需要它爲每個新的ID行在0和1之間切換。 –

回答

2

DENSE_RANK()可用於給每個id一個不同的值,但所有發生的相同id具有相同的值。不要% 2到任意數量,你會得到01 ...

SELECT 
    a.*, 
    c.CountryName 
    ROW_NUMBER() OVER(ORDER BY a.DateSubmitted) As RowNumber, 
    (DENSE_RANK() OVER (ORDER BY a.ID) - 1) % 2 As StrangeBinaryFlag 
FROM 
    Table1 a 
INNER JOIN 
    Table2 b 
    ON a.id = b.id 
INNER JOIN 
    Table3 c 
    ON c.countrycode = b.countrycode 
+0

我仍然不明白他是如何得到RowNumber ... – JNK

+0

是啊,他使用'a。*'是聰明的,但是沒有'DateSubmitted'他的輸出。我只是忽略了這一點,並給出了一個例子,給出了不同ID的0,1,0,1,0。模糊的希望是他的意思。如果沒有,對我沒有任何損失:) – MatBailie

+0

在一個或兩個子句中可能需要'PARTITION BY ID' [未經測試]。 –

1

遵循最佳的編程實踐&讓你的生活和他人的簡單:

而不是返回在查詢的格式化信息,你應該瞭解如何在顯示工具中更改鍵時更​​改行顏色。這就是它的目的所在,並且將比SQL更容易,更優雅地完成工作。

+1

我同意,如果您可以使用報告工具來提供您需要做的事情,那麼您可以這樣做,否則,您需要找到一種替代方法。 –

相關問題