如何将列单位添加到每行的@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
我正在为 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