作者ThreeDay0905 (三天)
看板Database
標題Re: [SQL ] 查詢表格問題 及 Select語法問題
時間Sun Oct 17 00:17:00 2010
※ 引述《flyalice (飛吧!愛麗斯)》之銘言:
: 大家好, 公司目前有一套軟體用的資料庫系統是SQL
: 要做一些查詢報表出來,我才剛自學,有點問題想請教
: 使用SQL 2008
: 我已用SQL查詢連結資料庫產生了一個表格TableA:
: number Project Value
: ------------------------------------
: 001 P016 Y
: 001 P017 Y
: 001 P018 N
: 002 P016 Y
: 002 P017 N
: 002 P018 N
: 我想變成TableB 顯示出來
: TableB想把number不要重覆顯示, 然後依project,列出Value值。類似將number做為列標
: 題, Project做為欄標題, 中間值為value,
: TableB為:
: number P016 P017 P018
: ---------------------------------------
: 001 Y Y N
: 002 Y N N
: 請問有什麼好方法嗎?
: 先感謝大家提供的意見。
可以使用PIVOT得到你要的效果
SELECT * FROM TableA
PIVOT( MAX(Value) FOR Project IN (P016,P017,P018)) AS pvtTable
至於假如要產生動態的欄位,也就是說不只P016, P017,P018三個的話
寫程式組SQL字串吧
: ==================================================
: 另一個問題, 如果用select 方法查詢資料,如何將標題別名以變數顯示
: 我的語法如下:
: Select number, value
: From TableA
: Where Project = 'P016'
: 會顯示出
: number value
: ----------------------
: 001 Y
: 002 Y
: 我想要的顯示方式是
: number P016
: ----------------------
: 001 Y
: 002 Y
: 可以將語法變成
: Select number, value as 'P016'
: From TableA
: Where Project = 'P016'
: 但我要做3次, 所以我用While語法加上變數
: 希望可以做到
: Declare @pname char(10)
: Select number , value as @pname
: From TableA
: Where Project = @pname
: 我試過很多次, 在value as @pname會有問題,怎麼試都試不出來,
: 是不是標題別名不能以變數取代呢?
: 先謝謝大家提供的意見。
沒遇過這種需求..
不過假如把程式碼把改成
DECLARE @sql NVARCHAR(100)
DECLARE @pname NVARCHAR(10)
SET @sql = N'SELECT number, value as ' + @pname
+ ' FROM TableA WHERE Project = ''' + @pname + ''''
EXECUTE (@sql)
把這段放在WHILE裡面可以達到你的需求
只是這不會是最好的解法
用字串組的SQL效能上會比直接下來得差
--
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 111.249.155.47
推 flyalice:非常感謝, 我先試試, 我在書上沒看過pivot語法. 10/17 08:36
→ ThreeDay0905:PIVOT一般是用在匯總轉置用的 用在這只是為了方便 10/17 09:33
※ 編輯: ThreeDay0905 來自: 111.249.155.47 (10/17 09:35)
→ flyalice:有點問題, value並非是int,在pivot中用max(value)有問題 10/18 00:08
→ flyalice:第一個問題用Pivot OK,可以運作, 是我剛剛搞錯了, 感謝!! 10/18 00:49