如何基于标志允许为1动态添加列columnmeasure?

已加入
2018年9月26日
留言内容
22
编程经验
3-5
当表#nonparametric表的Flag Allow为1时,如何动态添加列列单位?

我在SQL Server 2012上工作,当Flag Allow = 1时我无法动态添加列单位

如下例所示,我有两行具有Flag Allow = 1

family 90AM将在两列上分别是family 90和family unit AM,因为它的Flag Allow = 1

参数50.4kg将是两列上的参数50.4和参数单位kg,因为它的标志允许= 1
SQL:
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),
('5000','TOYOTA','alominia','source','70.20kg',0),
('8000','MACDA','motor','parametric','50.40kg',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 @sh [dbo].[FeaturesbyPL];

INSERT into @sh
  select Distinct  DKFeatureName  , DisplayOrder  from  #FinalTable
-------------------------------------------
  declare @SQL NVARCHAR (MAX) =  ''
  ---------------------------------------
declare @Columns nvarchar(max)=( select
                                substring(
                                    (
                                        Select  ',['+ST1.DKFeatureName +']' AS [text()]
                                        From @sh ST1 order by DisplayOrder

                                        For XML PATH ('')
                                    ), 2, 10000) [Columns])
        select @Columns
--------------------------------------------------
DECLARE @Header nvarchar(max)=( select
                               substring(
                                   (
                                       Select  ', '''+ST1.DKFeatureName +''' as ['+ST1.DKFeatureName +']' AS [text()]
                                       From @sh ST1 order by DisplayOrder

                                       For XML PATH ('')
                                   ), 2, 10000) [Columns])

        select @Header


select @SQL =CONCAT('
                    SELECT *  Into #NewTable2
                    FROM #nonparametricdata
                    PIVOT(max(Tempvalue) FOR DKFeatureName IN ('[email protected]+')) AS PVTTable   
                    ',
                    N'
                    select 
                    ''PART_ID'' as ''PART_ID'' ,''PartNumber'' as ''Z2 Part number'' , ''CompanyName'' as ''Z2 Manufacturer'' ,   ' [email protected] + '
                    union all
                    select PART_ID , PartNumber , CompanyName  ,   ' [email protected] + '  from  #NewTable2


                    ')


EXEC (@SQL)

具有“允许标志” = 1的行的预期结果如下:
 
由主持人最后编辑:

跳伞

工作人员
已加入
2019年4月6日
留言内容
2,500
地点
弗吉尼亚州切萨皮克
编程经验
10+
看起来像一个SQL问题而不是C#问题,在上面的代码中我什至没有看到一盎司C#。
 

羊皮

退休程序员
工作人员
已加入
2018年9月5日
留言内容
1,926
地点
英国
编程经验
10+
如果您要回复,请在语法上做些努力。

不,你不是吗?那代码块呢?

我们知道什么代码块是什么样子,但是我们也知道Sql是什么样子。

主题交叉发布在这里: FlagAllow为1时如何动态添加列columnunit?
 
最佳 底部