添加列通过从sql Server中的另一个表中选择所有项目来选择表
Posted
技术标签:
【中文标题】添加列通过从sql Server中的另一个表中选择所有项目来选择表【英文标题】:Add column To select Table by select all items from another table in sql Server 【发布时间】:2017-06-22 15:33:56 【问题描述】:添加列 通过从 sql Server 中的另一个表中选择所有项目来选择表。 我有这样的拖车表:
表1
ID || Title
1 || Ruler
2 || Book
3 || Pen
. || .
. || .
. || .
表2
itemID || Price || Date
1 || 200 || 2016-01-21
2 || 30 || 2017-03-01
3 || 27 || 2014-06-09
. || .
. || .
. || .
表格结果
Date || Ruler || Book || pen || … more
2016-01-21 || 200 || || ||
2017-03-01 || || 30 || ||
2014-06-09 || || || 27 ||
.
.
.
没用
Declare @cols1 varchar(max)
Declare @query nvarchar(max)
Select @cols1 = stuff((select distinct ','+QuoteName([Title]) from table1 for xml path('')),1,1,'')
Set @Query = ' Select * from (
Select t2.[Date], t1.[Title], t2.Price from table2 t2 inner join table1 t1
on t2.ItemId = t1.Id ) a pivot (max([Price]) for [Title] in ( ' +@cols1 + ' ) ) p '
exec sp_executeSql @query
它返回最高价格,但我想要这样的最后价格:
pivot (Select ([Price]) from table2 order by Date desc for [Title] in ( ' +@cols1 + ' ) ) p '
语法错误返回!?
【问题讨论】:
你从哪里得到Table1.ID.*
的语法?尝试从当前查询中删除 .*
。
SQL Server dynamic PIVOT query?的可能重复
【参考方案1】:
您可以使用如下所示的枢轴:
Select * from (
Select t2.[Date], t1.[Title], t2.Price from table2 t2 inner join table1 t1
on t2.ItemId = t1.Id ) a
pivot (max([Price]) for [Title] in ([Ruler],[Book],[Pen]) ) p
对于标题的动态列表,您可以查询如下:
Declare @cols1 varchar(max)
Declare @query nvarchar(max)
Select @cols1 = stuff((select distinct ','+QuoteName([Title]) from table1 for xml path('')),1,1,'')
Set @Query = ' Select * from (
Select t2.[Date], t1.[Title], t2.Price from table2 t2 inner join table1 t1
on t2.ItemId = t1.Id ) a
pivot (max([Price]) for [Title] in ( ' +@cols1 + ' ) ) p '
exec sp_executeSql @query
【讨论】:
pivot (max([Price]) for [Title] in ( ' +@cols1 + ' ) ) p '
它返回最高价格,但我想要最后价格 像这样:pivot (**Select ([Price]) from table2 order by Date desc** for [Title] in ( ' +@cols1 + ' ) ) p '
语法错误返回!?
能否提供更多输入样本数据?
哦,我的错,你的答案是完美的。谢谢以上是关于添加列通过从sql Server中的另一个表中选择所有项目来选择表的主要内容,如果未能解决你的问题,请参考以下文章
SQL Server - 将表中的某些列镜像到同一服务器上的另一个数据库,无需复制
当用户在 MS Access 中修改表中的另一列时,如何在 SQL Server 中将列设置为今天的日期 [关闭]