Sql 如何将装置显示为同一显示顺序的第二显示项?

Sql 如何将装置显示为同一显示顺序的第二显示项?,sql,tsql,stored-procedures,sql-server-2012,dynamic-sql,Sql,Tsql,Stored Procedures,Sql Server 2012,Dynamic Sql,我在SQL server 2012上工作,我面临一个问题:我无法将包含单元的功能安排为同一显示顺序的第二项显示 以特征族为例 'Family' as [Family], 'FamilyMaxValue' as [FamilyMaxValue], 'FamilyUnit' as [FamilyUnit] 我需要它如下 'Family' as [Family], 'FamilyUnit' as [FamilyUnit],'FamilyMaxValue' as [FamilyMaxValue] 功

我在SQL server 2012上工作,我面临一个问题:我无法将包含单元的功能安排为同一显示顺序的第二项显示

以特征族为例

'Family' as [Family], 'FamilyMaxValue' as [FamilyMaxValue], 'FamilyUnit' as [FamilyUnit]
我需要它如下

'Family' as [Family], 'FamilyUnit' as [FamilyUnit],'FamilyMaxValue' as [FamilyMaxValue]
功能、单位和最大值对于每个功能都获得相同的显示顺序,但我的问题除外

如何将设备作为相同显示顺序的第二个显示

这意味着更改将是以逗号分隔的项目顺序,以显示功能单元作为同一显示顺序的第二个显示

 create table #SplitNumberAndUnitsFinal
(
DKFeatureName  nvarchar(100),
DisplayOrder  int
)
insert into #SplitNumberAndUnitsFinal (DKFeatureName,DisplayOrder)
values
('package',1),
('packageUnit',1),
('Family',2),
('FamilyMaxValue',2),
('FamilyUnit',2),
('parts',3),
('partsMaxValue',3),
('partsUnit',3)
DECLARE @Header nvarchar(max)=( select
substring(
    (
        Select  ', '''+ DKFeatureName +''' as ['+ DKFeatureName +']' AS [text()]
        From #SplitNumberAndUnitsFinal 
        GROUP BY DKFeatureName
        ORDER BY MIN(DisplayOrder)
        --order by DisplayOrder
       
        For XML PATH ('')
    ), 2, 10000) [Columns])
    print @Header
预期结果将要素单元排列为第二个显示,如下所示:

Feature,FeatureUnit,FeatureMaxValue according to same display Order



'package' as [package], 'packageUnit' as [packageUnit],
'Family' as [Family], 'FamilyUnit' as [FamilyUnit],'FamilyMaxValue' as [FamilyMaxValue],
'parts' as [parts], 'partsUnit' as [partsUnit],'partsMaxValue' as [partsMaxValue]
我不需要如下显示:

Feature,FeatureMaxValue,FeatureUnit for same Display Order

'package' as [package], 'packageUnit' as [packageUnit],
 'Family' as [Family], 'FamilyMaxValue' as [FamilyMaxValue], 'FamilyUnit' as [FamilyUnit],
 'parts' as [parts], 'partsMaxValue' as [partsMaxValue], 'partsUnit' as [partsUnit]

如果
DisplayOrder
本身不是唯一的,则需要一个附加列来控制显示顺序。这将允许您为所需的顺序指定
ORDER BY
子句中的两列:

CREATE TABLE #SplitNumberAndUnitsFinal
(
    DKFeatureName  nvarchar(100),
    DisplayOrder  int,
    SecondaryDisplayOrder  int
);
INSERT INTO #SplitNumberAndUnitsFinal (DKFeatureName,DisplayOrder,SecondaryDisplayOrder)
VALUES
    ('package',1,1),
    ('packageUnit',1,2),
    ('Family',2,1),
    ('FamilyMaxValue',2,3),
    ('FamilyUnit',2,2),
    ('parts',3,1),
    ('partsMaxValue',3,2),
    ('partsUnit',3,3)
DECLARE @Header nvarchar(MAX)=( select
SUBSTRING(
    (
        SELECT  ', '''+ DKFeatureName +''' as ['+ DKFeatureName +']' AS [text()]
        FROM #SplitNumberAndUnitsFinal 
        ORDER BY DisplayOrder,SecondaryDisplayOrder
        FOR XML PATH ('')
    ), 2, 10000) [Columns]);
PRINT @Header;

在添加新列SecondaryDisplayOrder之后,请告诉我如何执行此操作。我可以在select@header语句中执行此操作,而不更改主临时表源数据中必须有一些列,以提供所需的顺序或明确的规则来确定顺序。提示:将对象名称组合为动态SQL语句用于避免出现奇数名称的问题,例如带有空格的
新表
,或像
From
这样的保留字
QuoteName
不仅仅是在字符串周围添加方括号,它还处理字符串中出现的方括号。