添加列通过从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 中将列设置为今天的日期 [关闭]

需要从 SQL Server 中的另一个表访问用户名

您可以从一个表中的列中调用数据以在 SQL 和 Laravel 中的另一个表中使用吗?

SQL Server 4

sql server 查询中是不是需要嵌套子选择来选择最大的 1 个字段和最小的另一个?