我有一個資料透視表問題,希望得到幫助....
我遵循的教程沒有幫助,因為它們在已知值串列上使用 IN 陳述句來創建列。
這是我的 IN 陳述句,我可能會被卡住......我正在嘗試一個子查詢,但它沒有幫助。
SELECT
JobDesc, YearExp
FROM
(SELECT JobDesc, YearExp, Worker
FROM Q2) AS SourceTable
PIVOT
(MIN(YearExp)
FOR YearExp IN (SELECT YearExp FROM Q2)
) AS PivotTable
資料:
| 工人 | 職位描述 | 多年經驗 |
|---|---|---|
| 1001 | 律師 | 6 |
| 2002年 | 律師 | 12 |
| 3003 | 律師 | 17 |
| 4004 | 醫生 | 21 |
| 5005 | 醫生 | 9 |
| 6006 | 醫生 | 8 |
| 7007 | 科學家 | 13 |
| 8008 | 科學家 | 2 |
| 9009 | 科學家 | 7 |
我試圖實作的輸出:
| 職位描述 | 最有經驗 | 經驗最少 |
|---|---|---|
| 律師 | 3003 | 1001 |
| 醫生 | 4004 | 6006 |
| 科學家 | 7007 | 8008 |
uj5u.com熱心網友回復:
視窗函式row_number() over()與條件聚合相結合應該可以解決問題
Select [Job Description]
,[Most] = max( case when RN1 = 1 then worker end)
,[Least] = max( case when RN2 = 1 then worker end)
From (
Select *
,RN1 = row_number() over (partition by [Job Description] order by [Years of Experience] desc)
,RN2 = row_number() over (partition by [Job Description] order by [Years of Experience] asc)
from YourTable
) A
Group By [Job Description]
結果
Job Description Most Least
Doctor 4004 6006
Lawyer 3003 1001
Scientist 7007 8008
uj5u.com熱心網友回復:
該PIVOT運算子相當不靈活,并且需要一個固定的列串列來進行透視。
@JohnCappelletti 給出的答案很好,但由于相反的行號,它具有需要額外排序的缺點。
這是一個只需要一種的解決方案
Select [Job Description]
,[Most] = max( case when NextValue IS NULL then worker end)
,[Least] = max( case when RN = 1 then worker end)
From (
Select *
,RN = row_number() over (partition by [Job Description] order by [Years of Experience] asc)
,NextVal = LEAD([Years of Experience]) over (partition by [Job Description] order by [Years of Experience] asc)
from YourTable
) A
Group By [Job Description]
內部的值LEAD必須是不可為空的值。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/374174.html
標籤:sql sql-server 查询语句 数据透视表
