Tôi biết có một số thảo luận không áp dụng/bỏ qua ở đây nhưng tôi không thể tìm thấy bất kỳ cuộc thảo luận nào đề cập đến vấn đề của tôi. Những gì tôi có cho đến nay là như sau:TSQL Có thể tháo nhiều cột bằng các hàng có tên?
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
Bây giờ, điều tôi muốn là thêm một số cột khác, ví dụ: một tên được đặt tên là Bonus mà tôi cũng muốn đưa vào Perc10, Perc25 và Median Rows. Thay vào đó, tôi cũng đã thực hiện một truy vấn với cross áp dụng, nhưng ở đây, có vẻ như bạn không thể "buộc" sắp xếp các hàng như bạn có thể với unpivot. Nói cách khác, tôi không thể có một loại tùy chỉnh, nhưng chỉ là một loại theo một số trong bảng, nếu tôi đúng? Ít nhất, ở đây tôi nhận được kết quả như tôi muốn có, nhưng các hàng nằm sai trật tự và tôi không có các tên hàng như Perc10 vv mà sẽ được tốt đẹp.
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
Perc là viết tắt của phần trăm tại đây.
Output được thiết kế để có một cái gì đó như thế này:
+--------------+---------+-------+
| Calculation | Salary | Bonus |
+--------------+---------+-------+
| Perc10 | 25 | 5 |
| Perc25 | 35 | 10 |
| Median | 27 | 8 |
+--------------+---------+-------+
Tôi có bỏ lỡ một cái gì đó hoặc đã làm tôi điều gì sai? Tôi đang sử dụng MSSQL 2014, đầu ra sẽ đi vào SSRS. Cảm ơn rất nhiều cho bất kỳ gợi ý trước!
Chỉnh sửa để làm rõ: Các UNPIVOT-Phương pháp cho đầu ra sau đây:
+--------------+---------+
| Calculation | Salary |
+--------------+---------+
| Perc10 | 25 |
| Perc25 | 35 |
| Median | 27 |
+--------------+---------+
nên nó thiếu cột "Bonus" ở đây.
Hội Chữ thập-Áp-Phương pháp cho đầu ra sau đây:
+---------+-------+
| Salary | Bonus |
+---------+-------+
| 35 | 10 |
| 25 | 5 |
| 27 | 8 |
+---------+-------+
Vì vậy, nếu bạn so sánh nó với sản lượng dự định, bạn sẽ nhận thấy rằng cột "Tính toán" là mất tích và phân loại hàng là sai (lưu ý rằng dòng 25 | 5 nằm trong hàng thứ hai thay vì dòng đầu tiên).
Chỉnh sửa 2: Định nghĩa của xem và dữ liệu mẫu: Chế độ xem về cơ bản chỉ thêm các cột được tính của bảng. Trong bảng, tôi có các Cột như Mức lương và Tiền thưởng cho mỗi JobID. The View sau đó chỉ cần tính toán percentiles như thế này:
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
Vì vậy, đầu ra là như sau:
+----+-------+---------+-----------+-----------+
| 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 |
+----+-------+---------+-----------+-----------+
Cuối cùng, quan điểm sẽ được tham số trong một thủ tục lưu trữ.
của bạn 'vCalculatedView' dường như làm các tính toán trước ... 'nhóm by' của bạn không được làm bất cứ điều gì ... Vui lòng hiển thị kết quả bạn nhận được với bảng sao kê của bạn và cung cấp một số dữ liệu mẫu và đầu ra dự kiến. – Shnugo
Nhóm trong mã Cross Apply áp dụng điều gì đó: Nếu tôi không đưa nó vào, Perc10, Perc25, Median sẽ lặp đi lặp lại. Đó là vì ID công việc không phải là ID của nhân viên và như vậy, ID công việc có thể chứa nhiều hơn một nhân viên. – ksauter
OK. Tôi hiểu ý bạn là gì. Có thể, rằng một 'CTE' với một' CHỌN DISTINCT' là những gì bạn cần. 'GROUP BY' bạn muốn sử dụng cho các tập hợp như' MAX() 'hoặc' SUM() 'Vui lòng cung cấp kết quả truy vấn hiện tại của bạn và cách dữ liệu của bạn sẽ được hiển thị. – Shnugo