Sql server 如何在不同的列中选择不同的行值

Sql server 如何在不同的列中选择不同的行值,sql-server,Sql Server,我有一张像这样的桌子 ID Date Value 1 12/12/2014 A 1 24/12/2014 T 2 13/12/2014 A 2 23/12/2014 T 3 12/03/2014 A 3 12/04/2014 T 4 12/12/2014 T 5 12/04/2014 T 我想得到这样的结果,其中ADate是值为A的日期,TDate是值为T的日期 ID ADate TD

我有一张像这样的桌子

ID  Date         Value
1   12/12/2014   A
1   24/12/2014   T
2   13/12/2014   A
2   23/12/2014   T
3   12/03/2014   A
3   12/04/2014   T
4   12/12/2014   T
5   12/04/2014   T
我想得到这样的结果,其中ADate是值为A的日期,TDate是值为T的日期

ID    ADate            TDate
1     12/12/2014      24/12/2014
2     13/12/2014      23/12/2014
3     12/03/2014      12/04/2014
4         -           12/12/2014
5         -           12/04/2014

您可以使用WHERE语句和JOIN语句来获取:

SELECT a.id, a.date AS ADate, b.date AS TDate
FROM table a
JOIN table b on a.id = b.id and b.value = 'T'
WHERE a.value = 'A'
WHERE语句确保
ADate
来自
value='a'
所在的行


JOIN语句确保
TDate
来自
value='T'
使用
条件聚合的行。试试这个

SELECT id,
       Min(CASE
             WHEN value = 'A' THEN [Date]
           END) Adate,
       Max(CASE
             WHEN value = 'T' THEN [Date]
           END) Tdate
FROM   Tablename
GROUP  BY id 
更新:获取具有相同ID的行

DECLARE @cnt INT

SELECT TOP 1 @cnt = Count(1) / 2
FROM   #test
GROUP  BY id
ORDER  BY Count(1) / 2 DESC

SELECT id,
       Min(CASE
             WHEN value = 'A' THEN [Date]
           END) Adate,
       Max(CASE
             WHEN value = 'T' THEN [Date]
           END) Tdate
FROM   (SELECT Row_number()
                 OVER (
                   partition BY id, value
                   ORDER BY date)%@cnt rn,
               *
        FROM   #test) a
GROUP  BY id,rn 

还有一个选项,带有排名函数行数

;WITH cte AS
 (
  SELECT *, ROW_NUMBER() OVER(PARTITION BY id ORDER BY [date]) AS rn
  FROM dbo.test103 t  
  )
  SELECT c.id, c.[date] AS ADate, c2.[date] AS TDate
  FROM cte c LEFT JOIN cte c2 ON c.Id = c2.Id AND c.rn = c2.rn - 1 AND c.Value != c2.Value
  WHERE c.value = 'A'

@NoIdeaForName这是怎么回事?@RaduGheorghiu好吧,有了给定的信息,我就只能这样了provide@NoIdeaForName如果你想帮助OP解决问题,只需询问更多细节。如果你真的想进行troll,至少要确保你的查询没有返回语法错误。我已经编辑了我的问题。@Rain我的答案不使用group by btwI不能使用group by,因为我的实际表包含许多具有相同ID的行,我希望每个ID都不在group中。@Rain然后添加示例数据和相应的预期输出!!知道了。这给了我正确的答案。尽管出于我的目的我需要稍微调整一下。谢谢