【问题标题】:Flatten SQL rows into columns将 SQL 行扁平化为列
【发布时间】:2013-11-15 02:34:11
【问题描述】:

我有一个只返回 1 行的查询,正如它应该的那样,我想获得与这个父母相关的孩子,但我希望它变平。我想将子项作为字段添加到查询的末尾。

所以我现在有一个临时表中的结果,我可以选择这个表,这些是结果: 从#Children中选择*

Row LastName    FirstName   MiddleName  A-Number    StatusID    DateOfBirth
1   Chu     Da Chi      NULL    NULL    26616   00:00.0
2   Chu     Herbert     NULL    NULL    26958   00:00.0
3   Chu     Herberta    NULL    NULL    26959   00:00.0
4   Chu     Mini        NULL    NULL    166325  59:30.0
5   Chu     Qwerty      NULL    NULL    212792  00:00.0
6   Chu     Xiao Chi    NULL    NULL    26615   00:00.0

我希望这些行出现在单行的末尾,如下所示:

ParentID Child1FirstName Child2Firstname Child3Firstname, etc...

【问题讨论】:

  • 到目前为止你有什么想法?
  • 你用的是什么数据库?
  • ParentId 是什么?

标签: sql pivot for-xml


【解决方案1】:

试试这个

SET NOCOUNT ON;

DECLARE @#TempTable TABLE (FirstName VARCHAR(50));

INSERT INTO @#TempTable
SELECT FirstName from #Children

DECLARE @result  varchar(8000) = 'ParentID',
        @FirstName  varchar(50);

WHILE EXISTS (SELECT * FROM  @#TempTable)
BEGIN
    SELECT TOP 1 @FirstName = FirstName FROM @#TempTable;

    SET @result += ' ' + @FirstName;

    DELETE  @#TempTable Where FirstName = @FirstName;
END

PRINT @result;

【讨论】:

    【解决方案2】:
    SELECT ParentID
          ,MAX(CASE WHEN Row = 1 THEN FirstName ELSE NULL END) AS Child1FirstName
          ,MAX(CASE WHEN Row = 2 THEN FirstName ELSE NULL END) AS Child2FirstName
          ,MAX(CASE WHEN Row = 3 THEN FirstName ELSE NULL END) AS Child3FirstName
          ...
    FROM #Children
    GROUP BY ParentID
    

    【讨论】:

      猜你喜欢
      • 2013-01-17
      • 2012-03-17
      • 1970-01-01
      • 2019-04-23
      • 2021-05-24
      • 2022-09-23
      • 1970-01-01
      • 2017-02-13
      • 2016-01-14
      相关资源
      最近更新 更多