作者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
1F:推 flyalice:非常感谢, 我先试试, 我在书上没看过pivot语法. 10/17 08:36
2F:→ ThreeDay0905:PIVOT一般是用在汇总转置用的 用在这只是为了方便 10/17 09:33
※ 编辑: ThreeDay0905 来自: 111.249.155.47 (10/17 09:35)
3F:→ flyalice:有点问题, value并非是int,在pivot中用max(value)有问题 10/18 00:08
4F:→ flyalice:第一个问题用Pivot OK,可以运作, 是我刚刚搞错了, 感谢!! 10/18 00:49