回答
它看起來像你試圖unpivot的的數據,而不是應用支點。 UNPIVOT函數會將多列轉換爲行。
如果你知道你將多少列有,那麼你可以硬編碼的解決方案:
select emp_id, col, value
from
(
select emp_id, name, cast(age as varchar(20)) age, d.title
from empTable e
inner join empDesignationTable d
on e.designationId = d.id
) d
unpivot
(
value
for col in (name, age, title)
) u;
但如果你打算有未知列,那麼你就需要使用動態SQL:
DECLARE @colsUnpivot AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX)
select @colsUnpivot = stuff((select ','+quotename(C.column_name)
from information_schema.columns as C
where C.table_name in ('empTable', 'empDesignationTable') and
C.column_name not like '%id%'
for xml path('')), 1, 1, '')
set @query
= 'select emp_id, col, value
from
(
select emp_id, name, cast(age as varchar(20)) age, d.title
from empTable e
inner join empDesignationTable d
on e.designationId = d.id
) d
unpivot
(
value
for col in ('+ @colsunpivot +')
) u'
exec(@query)
見SQL Fiddle with Demo。兩者都給出結果:
| EMP_ID | COL | VALUE |
--------------------------------------
| 1 | name | John |
| 1 | age | 25 |
| 1 | title | Software Engineer |
| 2 | name | Smith |
| 2 | age | 31 |
| 2 | title | UI Designer |
@BF,這還不完全動態。就像如果表emptable有另一列[MgrID int],那麼該列將不會是透視。而且我們知道,unpivot列必須是相同的數據類型和長度,因此,需要動態檢查列數據類型定義,dynmaic轉換爲相同的varchar長度。 – ljh 2013-04-04 15:34:58
你可以創建一個動態的Pivot SQL查詢。通常動態查詢是不好的,但有時他們不能得到幫助。你應該考慮改變你的數據庫結構,如果你不知道有多少列中顯示,你突然發佈某人的個人信息無意中......
深入細節與更多類似的話題都可以在這裏找到: SQL Pivot Query with Dynamic Columns
我已經創建了一個動態數據透視查詢,但這不會幫助我。 – 2013-04-04 06:59:43
SQL FIDDLE DEMO
這是有多少列你知道你需要unpivot。
select ID, ColumnName, ColumnValue
from (
select ID, Name, cast(Age as varchar(10)) as Age, Designation from Employee
)P
unpivot
(
columnValue for ColumnName in ([Name], [Age], [Designation])
) as UP
但您在編寫此查詢之前必須知道列名稱。 – 2013-04-04 07:46:29
在哪種情況下,你無法知道你的表模式,無法知道你的表名。如果你不知道表模式,例如沒有查看錶DDL的權限,那麼你就沒有辦法從類別視圖中獲取它。如果你已經知道你的表模式,爲什麼你需要動態unpivot,它更復雜,一切都是成本驅動的。 – ljh 2013-04-04 15:38:36
- 1. 如何正確編寫以下查詢?
- 2. 如何編寫以下SQL查詢?
- 3. 如何編寫以下ActiveRecord查詢?
- 4. 如何編寫以下mySQL查詢?
- 5. SQL:如何編寫查詢以下
- 6. 如何爲以下查詢編寫QueryExpression?
- 7. 如何編寫一個LINQ查詢,該查詢將使用以下格式生成JSON字符串?
- 8. 如何在Lambda表達式中編寫以下sql查詢
- 9. 如何使用以下模式編寫此查詢?
- 10. 如何爲以下查詢編寫關係代數表達式?
- 11. 如何在SQLite中編寫查詢以輸出此格式?
- 12. 如何編寫一個導致字典的LINQ查詢?
- 13. 如何爲以下SQL查詢編寫HQL查詢?
- 14. 如何編寫下面的mongo查詢?
- 15. 如何編寫下面的SQL查詢?
- 16. 如何將以下查詢寫入參數化查詢?
- 17. 如何將以下SQL查詢重寫爲LINQ查詢?
- 18. 如何在沒有子查詢的情況下爲以下查詢編寫sql
- 19. 如何結合以下查詢導致MySQL的
- 20. 如何在以下情況下編寫查詢?
- 21. 如何編寫一個mysql查詢以滿足以下要求?
- 22. 如何編寫一個sql查詢以獲得以下結果?
- 23. 如何編寫SQL查詢以獲取以下內容...
- 24. 如何爲下表編寫postgres查詢?
- 25. 如何編寫查詢見下表
- 26. 編寫MYSQL以下用戶查詢
- 27. 以codeigniter風格編寫聯合查詢
- 28. 如何在SQL Server Express 2008中以可執行方式編寫以下查詢
- 29. 如何編寫滿足以下場景的查詢/觸發器?
- 30. 如何編寫sql查詢以獲得下面的結果
你的模式是什麼樣的?哪個RDBMS?看起來你想在這裏試試'UNPIVOT'。那是對的嗎? – 2013-04-04 06:55:00
看起來您需要構建動態的UNPIVOT腳本。 – ljh 2013-04-04 06:56:10
它的Sql Server 2008.我對UnPivot沒有太多的想法。 – 2013-04-04 06:56:28