如何将一个表中的行结果映射为查询中另一表的标题

时间:2018-09-21 19:46:31

标签: sql-server pivot unpivot

我有两个表,一个是用于存储数据的存储容器,另一个是在存储容器中存储用户定义的列标题。

CREATE TABLE [dbo].[HoldingTank]
(
    [Id] [int] IDENTITY(1,1) NOT NULL,
    [A] [nvarchar](max) NULL,
    [B] [nvarchar](max) NULL,
    [C] [nvarchar](max) NULL,
    [D] [nvarchar](max) NULL

    CONSTRAINT [PK_HoldingTank] 
        PRIMARY KEY CLUSTERED ([Id] ASC)
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO

SET IDENTITY_INSERT [dbo].[HoldingTank] ON 

INSERT [dbo].[HoldingTank] ([Id], [A], [B], [C], [D]) 
VALUES (1, N'VALUE1', N'VALUE2', N'VALUE3', N'VALUE4')

SET IDENTITY_INSERT [dbo].[HoldingTank] OFF 

CREATE TABLE [dbo].[ColumnHeaders]
(
    [Id] [int] IDENTITY(1,1) NOT NULL,
    [ColumnLetter] [nvarchar](2) NOT NULL,
    [ColumnHeading] [nvarchar](50) NOT NULL,
    [IsUsed] [bit] NOT NULL,

    CONSTRAINT [PK_ColumnHeaders] 
        PRIMARY KEY CLUSTERED ([Id] ASC)
) ON [PRIMARY]
GO

SET IDENTITY_INSERT [dbo].[ColumnHeaders] ON 

INSERT [dbo].[ColumnHeaders] ([Id], [ColumnLetter], [ColumnHeading], [IsUsed]) 
VALUES (1, N'A', N'Custom1', 1),
       (2, N'B', N'Custom2', 1),
       (3, N'C', N'Custom3', 1),
       (4, N'D', N'Custom4', 1)
GO

SET IDENTITY_INSERT [dbo].[ColumnHeaders] OFF

目标是构建一个查询,该查询从ColumnHeading表中的ColumnHeaders表中返回HoldingTank的值,以代替Id A B C D ------ ------ ------ ------ ------ 1 VALUE1 VALUE2 VALUE3 VALUE4 中普通列标题的位置,因此而不是

Id      Custom1         Custom2         Custom3         Custom4
------  --------------- --------------- --------------- ---------------
1       VALUE1          VALUE2          VALUE3          VALUE4

它将返回:

{{1}}

请确保这是PIVOT或PIVOT和UNPIVOT的组合。

不幸的是,我尝试过的每个变体和示例似乎总是假设标题表中的静态值(提前知道)。除非我缺少令人难以置信的基本知识。

任何帮助将不胜感激!

0 个答案:

没有答案