式の結果をGROUP BY句に含め、式の出力を選択するにはどうすればよいですか?TSQLの式でグループ分けして結果をキャプチャする方法は?
は、私はこのテーブルを持っていると言う:
╔════════════════════════╦═══════════╦═══════╗
║ Forest ║ Animal ║ Count ║
╠════════════════════════╬═══════════╬═══════╣
║ Tongass ║ Hyena ║ 600 ║
║ Tongass ║ Bear ║ 1200 ║
║ Mount Baker-Snoqualmie ║ Wolf ║ 30 ║
║ Mount Baker-Snoqualmie ║ Bunny ║ 2 ║
║ Ozark-St. Francis ║ Pigeon ║ 100 ║
║ Ozark-St. Francis ║ Ostrich ║ 1 ║
║ Bitterroot ║ Tarantula ║ 9001 ║
╚════════════════════════╩═══════════╩═══════╝
(もしあれば)私は、各フォレスト内の肉食動物の数と非肉食動物の数の行と列を必要としています。
╔════════════════════════╦═══════════════╦═══════════════╗
║ Forest ║ AnimalsOfType ║ AreCarnivores ║
╠════════════════════════╬═══════════════╬═══════════════╣
║ Tongass ║ 1800 ║ 1 ║
║ Mount Baker-Snoqualmie ║ 2 ║ 0 ║
║ Mount Baker-Snoqualmie ║ 30 ║ 1 ║
║ Ozark-St. Francis ║ 101 ║ 0 ║
║ Bitterroot ║ 9001 ║ 1 ║
╚════════════════════════╩═══════════════╩═══════════════╝
動物は肉食であるかどうかについての情報は、式の中でエンコードされている:これは私がこの例では、探しています出力されます。
SELECT TOP (1000)
[Forest],
SUM([COUNT]) AS AnimalsOfType,
AreCarnivores
FROM [Tinker].[dbo].[ForestAnimals]
GROUP BY
Forest,
CASE WHEN ForestAnimals.Animal IN ('Pigeon', 'Ostrich', 'Bunny') THEN 0 ELSE 1 END AS AreCarnivores
しかし、これが有効なTSQL構文ではありません。私がやりたいのは何
は、グループごとに式を含め、select句でその結果を参照しています。
SELECTで関数を再実行できるようにするために、動物列をGROUP BY句に含めると、動物の種類ごとに1行が表示されますが、これは目的の動作ではありません。
異なるテンポラリテーブルを選択して結果を結合するのは望ましくありません。このクエリの実際のバージョンでは、同じ結果セットでこの動作が必要な多数の式があり、非常に扱いにくいストアドプロシージャになるからです。
WITH X AS (
SELECT Forest, Animal, Count,
CASE WHEN ForestAnimals.Animal IN ('Pigeon', 'Ostrich', 'Bunny')
THEN 0
ELSE 1 END AS AreCarnivores
FROM [Tinker].[dbo].[ForestAnimals]
)
SELECT Forest, SUM(Count) AS AnimalsOfType, AreCarnivores
FROM X
Group by Forest, AreCarnivores;
それともについてのより詳細なこと、自分自身を繰り返します:
この機能を表示できますか?入力と出力を見る必要があります。 – Parfait
私はここで "機能"は赤ちゃんだと思います。 UDFであってもなくてもよい表現が必要です。 –
きれいにフォーマットされたテーブルのためにUpvoted! – pcdev