2013-08-06 81 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