我试图找到我的"问题"的最佳解决方案,但我的SQL知识是有限的,所以我请求你的帮助。
我目前有一个名为Project的"主"表,它的主键(ProjectId)用于其他表,如"Description"(见下文)
Table "Project" :
+-----------+----------+-----------+
| ProjectId | P_Field1 | P_Field2 |
+-----------+----------+-----------+
| 1 | val1 | val2 |
+-----------+----------+-----------+
Table "Descriptive" :
+-----------+----------+-----------+
| ProjectId | D_Field1 | D_Field2 |
+-----------+----------+-----------+
| 1 | valA | valB |
+-----------+----------+-----------+
我试图写一个存储过程,选择所有的数据与多个表的字段名,基于"投影",那么输出结果将是:
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"等一起使用,我不需要它。
您想要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