を高く評価し、この
![final output](https://i.stack.imgur.com/K9cK3.png)
すべてのヘルプは無視されている大きな問題があるようにする必要があります。テキストがすでにある可能性が最も高い理由があるが、 Total
の代わりにZZTotal
です。その理由は、適切な行順序を維持する(すなわち、合計を最下部に維持する)ために最も可能性が高い。
ZZTotal
行は、GROUP BY句のROLLUP
オプションを使用してSQL Serverによって自動的に生成される可能性が最も高いです。最初にROLLUP
オプションは、文字列 "Total"(または任意の文字列)が文字列以外のデータ型の列に収まらないため、ロールアップされている各 "グループ"にNULL
を配置します。結果を#final
にダンプすると、NULL
の値がZZTotal
で置き換えられました(ISNULL()
)。
現在の問題は、あなたがTotal
でZZTotal
値を置き換える場合は、「合計」行はおそらく、少なくともないU...
で始まる文字列を含む任意のグループ化のために、そのグループの下部にはならないだろうということである、またはTp...
、またはTou...
などです。
最初のステップは、#final
テーブルにIDENTITY列を追加することです。これを行うには、#final
を作成して入力するクエリを変更してIDENTITY(INT, 1, 1) AS [RowNum],
をSELECT
ステートメントの最初の列として追加します。
第二段階ではなく、(例えばクラス2、など)であることを#final
を移入するクエリのISNULL(column, 'ZZTotal')
を変更することです:
IIF(GROUPING(class2) = 0, class2, N'Total for ' + class1) AS [Class2]
「クラス2」、「クラス1」の使用はありませんのでご注意ください、末尾にN'Total for ' + class1
。
第3の/最後のステップは、ORDER BY [RowNum]
をSet @Sql=
ステートメントの末尾に追加することです。
SELECT Class1, Class2, Class3 FROM #final ORDER BY [RowNum];
例1:ROLLUPのデフォルトの動作
SELECT ss.[name] AS [SchemaName],
so.[type_desc] AS [ObjectType],
COUNT(*) AS [ObjectCount]
FROM [master].sys.schemas ss
INNER JOIN [master].sys.objects so
ON so.[schema_id] = ss.[schema_id]
GROUP BY ss.[name], so.[type_desc] WITH ROLLUP;
例2:行
SELECT IIF(GROUPING(ss.[name]) = 0, ss.[name], N'Total') AS [SchemaName],
IIF(GROUPING(so.[type_desc]) = 0,
so.[type_desc],
IIF(GROUPING(ss.[name]) = 0,
N'Total for ' COLLATE Latin1_General_CI_AS_KS_WS + ss.[name],
N'---------------------------------------->')
) AS [ObjectType],
COUNT(*) AS [ObjectCount]
FROM [master].sys.schemas ss
INNER JOIN [master].sys.objects so
ON so.[schema_id] = ss.[schema_id]
GROUP BY ss.[name], so.[type_desc] WITH ROLLUP;
をグループ化するに置き換え、NULL値とROLLUP最終クエリのようなものでなければなりません
例3:あなたの質問は、それが理解できるようにする任意のコンテキストを欠い例#2
SELECT IIF(GROUPING(ss.[name]) = 0, ss.[name], N'Total') AS [SchemaName],
IIF(GROUPING(so.[type_desc]) = 0,
so.[type_desc],
IIF(GROUPING(ss.[name]) = 0,
N'Total for ' COLLATE Latin1_General_CI_AS_KS_WS + ss.[name],
N'---------------------------------------->')
) AS [ObjectType],
COUNT(*) AS [ObjectCount],
IDENTITY(INT, 1, 1) AS [RowNum]
INTO #TempResults
FROM [master].sys.schemas ss
INNER JOIN [master].sys.objects so
ON so.[schema_id] = ss.[schema_id]
GROUP BY ss.[name], so.[type_desc] WITH ROLLUP;
SELECT * FROM #TempResults ORDER BY [RowNum];
にIDENTITY列を追加し、INTO句。私はあなたが何をしようとしているのか、それとも何が問題なのか、これを読むことからは分かりません。あなたはここから始めるかもしれません。 http://spaghettidba.com/2015/04/24/how-to-post-at-sql-question-on-a-public-forum/ –
@Sean Lange質問を変更しました – user1554650
質問は確かに異なります残念ながらそれは以前よりもはっきりしていません。私は、このように動的に選択された列を持つクエリを疑います。あなたは動的SQLを使用して立ち往生している場合は、これを取り除くためにいくつかの深刻なハードルを飛び越さなければならないでしょう。ここではさらに多くの情報を提供する必要があります。動的SQLを再構築するには、文字列分割が必要になるでしょう。 –