根据相同的id从多个表中选择数据和字段名

时间:2014-06-05 09:12:40

标签: sql sql-server pivot

我试图为我的问题找到最佳解决方案"但我的SQL知识有限,所以我要求你的帮助。

我目前有一个"主要"名为Project的表及其主键(ProjectId)用于其他表,例如"描述" (见下文)

Table "Project" :
+-----------+----------+-----------+
| ProjectId | P_Field1 | P_Field2  |
+-----------+----------+-----------+
| 1         | val1     | val2      |
+-----------+----------+-----------+

Table "Descriptive" :
+-----------+----------+-----------+
| ProjectId | D_Field1 | D_Field2  |
+-----------+----------+-----------+
| 1         | valA     | valB      |
+-----------+----------+-----------+

我试图编写一个存储过程,根据" ProjectId"选择所有数据的字段名为多个表,然后输出结果为:

Sotred Procedure Result with parameter @ProjectId = 1 :
+-----------+----------+
| FieldName | Value    |
+-----------+----------+
| P_Field1  | val1     |
+-----------+----------+
| P_Field2  | val2     |
+-----------+----------+
| D_Field1  | valA     |
+-----------+----------+
| D_Field2  | valB     |
+-----------+----------+

一位朋友告诉我,SQL" PIVOT"功能可以帮助我,但我从来没有使用过这个功能,我对它的搜索确实没有帮助我,因为它经常与" SUM"," MAX"等等,我不需要那样。

提前致谢。

1 个答案:

答案 0 :(得分:2)

您需要unpivot,而非pivotunion

select fieldname, value from [project] 
unpivot (value for fieldname in ([p_field1],[p_field2])) p
where projectid=1
union all
select fieldname, value from [descriptive] 
unpivot (value for fieldname in ([d_field1],[d_field2])) p
where projectid=1