2013-08-06 114 views
1

我堅持使用T-SQL查詢。我認爲這是基本的。但我不知道。有人能夠友好地闡明它嗎?提前致謝!TSQL嵌套基本查詢

這是我的問題。我想編寫一個查詢來執行以下任務:

原始數據:

Department Type Salary Age 
1 1 1000 30 
1 2 1500 31 
1 3 2000 25 
2 1 250 35 
2 2 50 20 
2 3 300 35 

理想情況下,我想有一個表,其中有如下信息:

Department Type Salary Age 
1 3 2000 25 
1 2 1500 31 
1 1 1000 30 
2 3 300 35 
2 1 250 35 

選擇基於每個部門的比較。我比較每個部門內每種類型的薪水。並選擇同一部門的工資大於或等於第一類的人員。然後在每個部門內,記錄按工資降序排列。

這是我的錯誤代碼。

SELECT Department, Type, Salary, Age 
FROM Database.dbo.Table1 
WHERE Salary >= 
(
SELECT Salary 
FROM Database.dbo.Table1 
WHERE Type = 1 
GROUP BY Department 
) 
GROUP BY Department 

我希望插圖很清楚。如果不是,請隨時告訴我。我可以更多地解釋。

再次感謝!

回答

1

沒有什麼太棘手這裏 - 只是一個自聯接回到相同的表格來識別Type = 1工資,然後還算正常ORDER BY條款:

的樣本數據:

declare @t table (Department int,[Type] int, Salary int, Age int) 
insert into @t(Department,[Type], Salary, Age) values 
(1 ,1 ,1000 ,30 ), 
(1 ,2 ,1500 ,31 ), 
(1 ,3 ,2000 ,25 ), 
(2 ,1 ,250 ,35 ), 
(2 ,2 ,50 ,20  ), 
(2 ,3 ,300 ,35 ) 

查詢:

select 
    t1.* 
from 
    @t t1 
     inner join 
    @t t2 
     on 
      t1.Department = t2.Department and 
      t1.Salary >= t2.Salary and 
      t2.[Type] = 1 
order by t1.Department, t1.Salary desc 

您試圖使用GROUP BY是錯誤的,因爲GROUP BY沒有任何影響上的最終輸出順序。


作爲副作用的該分組被處理時,輸出可以在要您有用的順序來排序的方式 - 但是這只是一個副作用,不能保證。確保訂購的唯一方法是使用ORDER BY

+0

達您好,感謝幫助!其實,支持是如此之快,我得到了雞皮疙瘩......我嘗試了你的代碼,它正在工作!但是,你可以解釋一下關於@t的一些信息嗎?我看到@小老鼠/玫瑰/帽子簽了很多,但不太明白它...... – Counter10000

+0

@LinguisticsStudent - '@ t'是我給一個表變量的名字(T-SQL開始的大部分變量用'@')。一個表變量可以方便地編寫快速的,一次性的代碼來解答這裏的問題,因爲一旦SQL運行它就會消失 - 編寫這個腳本後我不必清理。 (他們也有其他用途)。請參閱[這裏](http://technet.microsoft.com/en-us/library/ms188927.aspx)以獲取更多信息。 –

+0

嗨達米安,感謝您的解釋!我搜索了一下關鍵詞。另一個問題是,我實際上使用了一個視圖,而不是我工作中的表格。而且它不夠奇怪...是因爲它是一種視圖嗎?或者你有其他建議嗎?我認爲沒有錯字。代碼被執行,但影響了0行。 – Counter10000

0
select * from T as t1 
where 
type=1 
or 
Exists(select 1 from t where t.[Department]=t1.[Department] 
          and 
          t.type=1 
          and 
          salary<t1.salary 
          ) 

order by [Department],salary DESC 

SQLFiddle demo

+0

嗨Valex,感謝您的幫助!我很感激!我確信代碼是正確的,因爲它在小提琴中工作。然而,我一定做了一些愚蠢的事情,並碰到了我對達米恩的建議所遇到的同樣的問題。是因爲我使用視圖而不是表格? – Counter10000

+0

謝謝@Valex。我解決了它! – Counter10000