Sql Server-对行进行分组

Sql Server-对行进行分组,sql,sql-server,database,Sql,Sql Server,Database,问题是我有一个表,其中有多行,如下所示: Name Container DateOrder HourOrder Test1 | Container1 | 04-21-2015 | 11:00 Test1 | Container2 | 04-22-2015 | 16:00 Test2 | Container2 | 04-15-2015 | 01:00 Test3 | Container3 | 04-15-2015 | 1

问题是我有一个表,其中有多行,如下所示:

Name    Container       DateOrder      HourOrder 
Test1 | Container1 |    04-21-2015 |    11:00
Test1 | Container2 |    04-22-2015 |    16:00
Test2 | Container2 |    04-15-2015 |    01:00
Test3 | Container3 |    04-15-2015 |    15:00
 Name     | Container  |    Container2  |   DateOrder  | DateOrder2 | HourOrder  | HourOrder2 
    Test1 | Container1 | Container2     |   04-21-2015 | 04-22-2015 |   11:00    | 16:00 
    Test2 | Container2 |                |   04-15-2015 |            |   01:00
    Test3 | Container3 |                |   04-15-2015 |            |   15:00
我需要按姓名、日期和容器做一份报告。。。我怎么能做到呢, 结果应该如下所示:

Name    Container       DateOrder      HourOrder 
Test1 | Container1 |    04-21-2015 |    11:00
Test1 | Container2 |    04-22-2015 |    16:00
Test2 | Container2 |    04-15-2015 |    01:00
Test3 | Container3 |    04-15-2015 |    15:00
 Name     | Container  |    Container2  |   DateOrder  | DateOrder2 | HourOrder  | HourOrder2 
    Test1 | Container1 | Container2     |   04-21-2015 | 04-22-2015 |   11:00    | 16:00 
    Test2 | Container2 |                |   04-15-2015 |            |   01:00
    Test3 | Container3 |                |   04-15-2015 |            |   15:00

我还需要知道哪个日期是哪个容器的日期,例如容器1日期是DaterOrder1,有什么建议吗?

您可以使用
行号()
执行类似操作

;WITH TestTable AS 
(
SELECT 'Test1' AS Name,'Container1' AS Container,'04-21-2015' AS DateOrder,'11:00' AS HourOrder 
UNION ALL SELECT 'Test1','Container2 ','04-22-2015 ','16:00'
UNION ALL SELECT 'Test2','Container2 ','04-15-2015 ','01:00'
UNION ALL SELECT 'Test3','Container3 ','04-15-2015 ','15:00'
),
CTE AS 
(
SELECT Name,Container,DateOrder,HourOrder,ROW_NUMBER()OVER(PARTITION BY Name ORDER BY Container ASC) rn
FROM TestTable
)

SELECT 
    C1.Name,
    C1.Container as Container,
    C2.Container as Container2,
    C1.DateOrder as DateOrder,
    C2.DateOrder as DateOrder2,
    C1.HourOrder as HourOrder,
    C2.HourOrder as HourOrder2
FROM CTE C1
LEFT JOIN CTE C2
    ON C1.Name = C2.Name
        AND C1.rn + 1 = C2.rn
WHERE C1.rn = 1

您基本上希望通过
Name
连接(聚合)
Container
DateOrder
分组-有两种方法可以做到这一点:XML或CLR。示例XML解决方案:我想,我们也可以使用COALESCE来解决这个问题……检查这个:我想我做了一个错误的示例,我将编辑表。