【问题标题】:How to display Unit as Second Display Item for same display Order?如何将单位显示为同一显示订单的第二个显示项目?
【发布时间】:2020-10-18 15:23:49
【问题描述】:

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

以特征族为例

'Family' as [Family], 'FamilyMaxValue' as [FamilyMaxValue], 'FamilyUnit' as [FamilyUnit]

我需要它如下

'Family' as [Family], 'FamilyUnit' as [FamilyUnit],'FamilyMaxValue' as [FamilyMaxValue]

Feature 和 Unit 以及最大值为每个 Feature 获得相同的 DisplayOrder,但我的问题

如何获得相同显示顺序的单位作为第二显示。

含义的变化将是用逗号分隔的项目顺序,以显示特征单元作为相同显示顺序的第二个显示。

 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]

【问题讨论】:

  • 在添加新列 SecondaryDisplayOrder 之后我做了什么
  • 你能告诉我怎么做吗
  • 我可以在不更改主临时表的情况下在 select @header 语句中执行此操作
  • 源数据中必须有一些列提供所需的顺序或明确的规则来确定顺序。
  • 提示:将对象名称组装成动态 SQL 语句时的最佳做法是使用 QuoteName() 以避免出现奇怪名称的问题,例如New Table 带有空格或保留字,例如 FromQuoteName 不仅仅在字符串周围添加方括号,它还处理字符串中出现的方括号。

标签: sql tsql stored-procedures sql-server-2012 dynamic-sql


【解决方案1】:

如果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;

【讨论】:

    猜你喜欢
    • 2018-02-25
    • 2012-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-06
    • 1970-01-01
    相关资源
    最近更新 更多