如何将列单位添加到每行的@Header 中,每行都有 Flag Allow 1?

How to add column Unit to @Header per every row have Flag Allow 1?

我正在为 SQL Server 2012 查询。我有一个问题:我无法将列单元添加到 @Header

当临时 table #nonparametric 中的行将标志 Allow 设置为 1 时,每个单元必须有两列。

这里我将标志允许设置为每个系列和参数 1,因此它必须声明 @Header

有 parametricUnit,familyUnit 因为我有 Flag Allow =1 for parametric and family on temp table

在#nonparametric temp table .

table 的另一个含义#nonparametric 我将得到所有 DKFeatureName 有标志允许 0 将有一个

column 但 DkFeatureName 有 Flag Allow =1 将有每个 Unit 的 Extra column 它的名称将是 column + 'Unit' on variable @Header .

create table #nonparametricdata
(
PART_ID nvarchar(50) ,
CompanyName  nvarchar(50),
PartNumber nvarchar(50),
DKFeatureName nvarchar(100),
Tempvalue nvarchar(50),
FlagAllow bit
)

insert into #nonparametricdata
values
('1222','Honda','silicon','package','15.50Am',0),
('1900','MERCEIS','GLASS','family','90.00Am',1),--have column per Unit on @Header because FlagAllow=1
('5000','TOYOTA','alominia','source','70.20kg',0),
('8000','MACDA','motor','parametric','50.40kg',1),--have column per Unit on @Header because FlagAllow=1
('8900','JEB','mirror','noparametric','75.35kg',0)

create table #FinalTable
(
DKFeatureName  nvarchar(50),
DisplayOrder  int
)

insert into #FinalTable (DKFeatureName,DisplayOrder) 
values 
('package',3),
('family',4),
('source',5),
('parametric',2),
('noparametric',1)

我的尝试如下:

DECLARE @Header NVARCHAR(MAX)
SELECT
    @Header = STUFF(
        (
            SELECT ', ' + QUOTENAME (DKFeatureName)
            FROM #FinalTable
            ORDER BY DisplayOrder
            FOR XML PATH ('')
        ),1,2,''
    )
    select @Header

预期结果是:

[noparametric], [parametric],[parametricUnit], [package], [family],[familyUnit], [source]

有点 hack,但通过使用 JOIN 和简单的 CASE

例子

DECLARE @Header NVARCHAR(MAX)
SELECT
    @Header = STUFF(
        (
            SELECT ', ' + quotename(A.DKFeatureName) + case when B.FlagAllow = 1 then ','+quotename(A.DKFeatureName+'Unit') else '' end
            FROM #FinalTable A
            Join #nonparametricdata B on A.DKFeatureName=B.DKFeatureName
            ORDER BY DisplayOrder
            FOR XML PATH ('')
        ),1,2,''
    )
    select @Header

Returns

[noparametric], [parametric], [parametricUnit], [package], [family], [familyUnit], [source]

编辑。

您可能想要更改

Join #nonparametricdata B on A.DKFeatureName=B.DKFeatureName

Join (Select distinct DKFeatureName,FlagAllow 
       From #nonparametricdata 
     ) B on A.DKFeatureName=B.DKFeatureName