ここにいくつかのunpivot/crossディスカッションディスカッションがありますが、私の問題をカバーするディスカッションは見つかりませんでした。私がこれまで持っていることは以下の通りです:TSQL名前付き行を使用した複数の列のアンピボットは可能ですか?
今SELECT Perc, Salary
FROM (
SELECT jobid, Salary_10 AS Perc10, Salary_25 AS Perc25, [Salary_Median] AS Median
FROM vCalculatedView
WHERE JobID = '1'
GROUP BY JobID, SourceID, Salary_10, Salary_25, [Salary_Median]
) a
UNPIVOT (
Salary FOR Perc IN (Perc10, Perc25, Median)
) AS calc1
、私が希望することなど、いくつかの他の列を追加することです。私はPerc10、Perc25、Median Rowsに入れたいBonusという名前のものもあります。
また、私はクロス・アプライで問合せを作成しましたが、ここではアンピボットのように行をソートすることはできません。言い換えれば、私はカスタムソートを持つことはできませんが、正しければテーブル内の数字に従ったソートだけです。少なくとも、ここには私が望むような結果が得られますが、行は間違った順序であり、Perc10などの行の名前はありません。
SELECT crossapplied.Salary,
crossapplied.Bonus
FROM vCalculatedView v
CROSS APPLY (
VALUES
(Salary_10, Bonus_10)
, (Salary_25, Bonus_25)
, (Salary_Median, Bonus_Median)
) crossapplied (Salary, Bonus)
WHERE JobID = '1'
GROUP BY crossapplied.Salary,
crossapplied.Bonus
ここで、PercentはPercentileの略です。
出力は次のようなものであることを意図している:
+--------------+---------+-------+
| Calculation | Salary | Bonus |
+--------------+---------+-------+
| Perc10 | 25 | 5 |
| Perc25 | 35 | 10 |
| Median | 27 | 8 |
+--------------+---------+-------+
私は何かを欠場か間違っている私に何かをしたのですか?私はMSSQL 2014を使用していますが、出力はSSRSに入ります。事前にヒントをいただきありがとうございます!明確化のため
編集:アンピボット-方法は、以下の出力が得られます。
+--------------+---------+
| Calculation | Salary |
+--------------+---------+
| Perc10 | 25 |
| Perc25 | 35 |
| Median | 27 |
+--------------+---------+
ので、ここで列「ボーナス」を欠いています。
クロス適用-方法は、次のような出力が得られます。
+---------+-------+
| Salary | Bonus |
+---------+-------+
| 35 | 10 |
| 25 | 5 |
| 27 | 8 |
+---------+-------+
あなたが意図した出力と比較した場合ので、あなたはコラム「計算」は不足していると、行のソートが間違っていることがわかります(行25 | 5は最初の行ではなく2行目にあることに注意してください)。
編集2:ビューの定義とサンプルデータ: ビューは基本的にテーブルの計算カラムを追加するだけです。この表では、各JobIDにSalaryとBonusのようなColumnsがあります。ビューは、その後、ちょうどこのようなパーセンタイルを計算します。
Select
Percentile_Cont(0.1)
within group (order by Salary)
over (partition by jobID) as Salary_10,
Percentile_Cont(0.25)
within group (order by Salary)
over (partition by jobID) as Salary_25
from Tabelle
ので、出力は以下のようである:最後に
+----+-------+---------+-----------+-----------+
| ID | JobID | Salary | Salary_10 | Salary_25 |
+----+-------+---------+-----------+-----------+
| 1 | 1 | 100 | 60 | 70 |
| 2 | 1 | 100 | 60 | 70 |
| 3 | 2 | 150 | 88 | 130 |
| 4 | 3 | 70 | 40 | 55 |
+----+-------+---------+-----------+-----------+
、ビュー、ストアドプロシージャにパラメータ化されます。
あなた 'vCalculatedView'は事前に計算を行うようです...何もしていませんby'あなたの'グループ...あなたの声明で得られた結果を示し、サンプルデータと予想される結果を提供してください。 – Shnugo
クロス・アプライ・コード内のグループは何かをします:もし私がそれをPerc10、Perc25に入れないなら、メディアンは何度も何度も繰り返します。これは、ジョブIDが従業員IDではないため、ジョブIDに複数の従業員が含まれる可能性があるためです。 – ksauter
OK。私はあなたが何を意味するかを見ます。 「SELECT DISTINCT」を持つ 'CTE'は、むしろ必要なものです。 'GROUP BY'は' MAX() 'や' SUM() 'のような集計に使用します。現在のクエリの結果とデータの表示方法を指定してください。 – Shnugo