如何基于唯一主键字段组合行和列,使用Asp.Net VB或C#。

3

我一直在从现有的客户端/服务器应用程序 MSSQL 数据库中制作基于 Web 的报告。我已经有一个工作查询,可以从多个表中汇总这些信息,并且如有必要,我可以提供查询和结果集。

目前的结果类似于以下内容:

ID | Name1 | Date1 | Veh  | PO    | Stops
_________________________________________  
1  | Bob 1 | 12/1  | Car  | 1234  |  4  
2  | Sam   | 12/3  | Car2 | 2245  |  3  
2  | Joe   | 12/4  | Van1 | 5568  |  2  
3  | Mel   | 1/4   | Van2 | 5678  |  5  
4  | Mel   | 2/2   | Car  | 3456  |  4  
4  | Sam   | 2/3   | Bus  | 4565  |  3  
4  | Joe   | 3/4   | Car  | 6766  |  3 

问题在于我事先不知道每个ID是否有一个或多个行。我需要结果返回合并的行,将几列数据连接起来并添加另一列。
类似于:
ID | Name1         | Date1 | Veh           | PO                |  Stops
1  | Bob 1         | 12/1  | Car           | 1234              |  4  
2  | Sam, Joe      | 12/3  | Car2, Van1    | 2245, 5568        |  5  
3  | Mel           | 1/4   | Van2          | 5678              |  5  
4  | Mel, Sam, Joe | 2/2   | Car, Bus, Car | 3456, 4565, 6766  |  10  
2个回答

3

我在SQL服务器中使用了一个自定义的用户定义函数,该函数使用了SQL Server中的COALESCE函数。这里有一个示例


1

看一下这个东西(完整的SQL示例

DECLARE @Table TABLE(
    ID INT,
    Name1 VARCHAR(50),
    Date1 VARCHAR(6),
    Veh VARCHAR(50),
    PO VARCHAR(10),
    Stops INT
)

INSERT INTO @Table SELECT 1,'Bob 1','12/1','Car','1234',4   
INSERT INTO @Table SELECT 2,'Sam','12/3','Car2','2245',3   
INSERT INTO @Table SELECT 2,'Joe','12/4','Van1','5568',2   
INSERT INTO @Table SELECT 3,'Mel','1/4','Van2','5678',5   
INSERT INTO @Table SELECT 4,'Mel','2/2','Car','3456',4   
INSERT INTO @Table SELECT 4,'Sam','2/3','Bus','4565',3   
INSERT INTO @Table SELECT 4,'Joe','3/4','Car','6766',3  

SELECT  *
FROM    @Table

SELECT  t.ID,
        (
            SELECT  tIn.Name1 + ', '
            FROM    @Table tIn
            WHERE   tIn.ID = t.ID
            FOR XML PATH('')
        ) Name1,
        MIN(Date1) Date1,
        (
            SELECT  tIn.Veh + ', '
            FROM    @Table tIn
            WHERE   tIn.ID = t.ID
            FOR XML PATH('')
        ) Veh,
        (
            SELECT  tIn.PO + ', '
            FROM    @Table tIn
            WHERE   tIn.ID = t.ID
            FOR XML PATH('')
        ) PO,
        SUM(Stops) Stops
FROM    @Table t
GROUP BY t.ID

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接