Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何将列单位添加到@Header per row have Flag Allow 1?_Sql_Tsql_Stored Procedures_Sql Server 2012_Dynamic Sql - Fatal编程技术网

Sql 如何将列单位添加到@Header per row have Flag Allow 1?

Sql 如何将列单位添加到@Header per row have Flag Allow 1?,sql,tsql,stored-procedures,sql-server-2012,dynamic-sql,Sql,Tsql,Stored Procedures,Sql Server 2012,Dynamic Sql,我正在处理SQL Server 2012的查询。我有一个问题:我无法将列单位添加到@Header 当临时表#非参数中的行的标志Allow设置为1时,每个单元必须有两列 在这里,我将标志allow设置为每个族1,并且参数化,因此它必须是@Header语句 有ParameterUnit,familyUnit,因为我在临时表上有参数化和族的标志Allow=1 关于#非参数温度表 表#非参数的另一个含义是我将获得所有DKFeatureName have标志,允许0将有一个 列,但DkFeatureNam

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

当临时表
#非参数
中的行的标志
Allow
设置为1时,每个单元必须有两列

在这里,我将标志allow设置为每个族1,并且参数化,因此它必须是
@Header
语句

有ParameterUnit,familyUnit,因为我在临时表上有参数化和族的标志Allow=1

关于#非参数温度表

表#非参数的另一个含义是我将获得所有DKFeatureName have标志,允许0将有一个

列,但DkFeatureName have Flag Allow=1将在每个单元上有额外的列。它的名称将是列+变量@Header上的“Unit”

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]

有点像黑客,但是通过使用连接和简单的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
返回

[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