【问题标题】:transpose rows into columns without aggregate (pivot)将行转置为没有聚合的列(枢轴)
【发布时间】:2018-10-23 04:01:47
【问题描述】:

我在 SQL Server 中有下表:

CREATE TABLE yourtable
( 
      [ID] int,
      [FORMID] int,
      [NAME] VARCHAR(30), 
      [VALUE] VARCHAR(30), 
      [CREATED] datetime,
);

INSERT INTO yourtable ([ID], [FormID], [NAME], [VALUE], [CREATED])
VALUES
    (1, 1, 'First N', 'A b', '2018-01-01'),
    (2, 1, 'Last N', 'c d', '2018-01-01'),
    (3, 1, 'Email', 'a@GM', '2018-01-01'),
    (4, 2, 'First N', 'a b2', '2018-01-01'),
    (5, 2, 'Last N', 'c d2', '2018-01-01'),
    (6, 2, 'Email', 'c@GM2', '2018-01-01');

我需要输出这样的东西,如果需要添加额外的列,不要介意。

First N | Last N
--------+--------
A b     | c d
a b2    | c d2

非常感谢,

【问题讨论】:

  • 无法回答此问题,因为您的表格缺少与给定名字、姓氏和电子邮件相关的列。也就是说,我们不知道如何将给定的名字和姓氏联系在一起。
  • 具有“First N”和“Last N”的值,这就是前辈的结构
  • 您的表中没有“前辈”,因为没有规定这种排序的列。通常,SQL 表没有内部顺序。如果您想在这里得到答案,您需要添加更多数据。
  • @Developer。 . .您需要在表中使用标识或 createdAt 列将行联系在一起。
  • @TimBiegeleisen 对不起,表中还有其他额外的列,我只是将它们删除以保持简单,没有意识到解决问题变得太简单了:) 现在更新问题

标签: sql sql-server sql-server-2012


【解决方案1】:

将您的表格分成如下两个表格,并根据自动增量列加入它们以获得名字和姓氏的组合。 当然,我从您的表格数据中假设有 LOT 的东西 :)

declare @yourtable table
    ([NAME] varchar(30), [VALUE] varchar(30))
;

INSERT INTO @yourtable
    ([NAME], [VALUE])
VALUES
    ('First N', 'A b'),
    ('Last N', 'c d'),
    ('Email', 'a@GM'),
    ('First N', 'a b2'),
    ('Last N', 'c d2'),
    ('Email', 'c@GM2')

    declare @firstName table(id int identity(1,1),[First N] varchar(100))
    declare @lastName table(id int identity(1,1),[Last N] varchar(100))

    Insert Into @firstName([First N])
    select value 
    from @yourtable where name= 'First N'

    Insert Into @lastName([Last N])
    select value 
    from @yourtable where name= 'Last N'

    SELECT [First N],[Last N] FROM  @firstName f LEFT JOIN  @lastName l on f.id = l.id

【讨论】:

    【解决方案2】:

    不是最好的方法,但我暂时使用了子查询

    Select
       formid as fid,
       (Select value from yourtable where Name = 'First Name' and formid=fid) as FirstName,
       (Select value from yourtable where Name = 'Last Name' and formid=fid) as LastName
    From yourtable
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-12-02
      • 1970-01-01
      • 1970-01-01
      • 2017-03-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多