我试图为我的问题找到最佳解决方案"但我的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"等等,我不需要那样。
提前致谢。
答案 0 :(得分:2)
您需要unpivot
,而非pivot
和union
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