我有下表
table1
id name value
-----------------------
1 n1 v11
1 n2 v12
1 ... ...
1 nm v1m
2 n1 v21
2 n2 v22
2 ... ...
2 nm v2m
...
...
k n1 vk1
k n2 vk2
k ... ...
k nm vkm
在此表中,每个id必须具有相同的名称集,尽管我们不知道他们在阅读表时是什么。
我希望通过以下约束来获取所有ID
1)如果name = ni,则value = 42 2)如果name = nj,则value = 24
如果上面的表格如下所示,那么我们可以
select id from table2 where ni = 42 and nj = 24
table2
id n1 n2 ... nm
---------------------------
1 v11 v12 ... v1m
2 v21 v22 ... v2m
...
k vk1 vk2 ... vkm
但是在原始表1中,我不确定这样做的最佳方法是什么。 也许对于这种约束,可以有一个特殊的查询。但是,如果约束更复杂,就像 n1!= 19或不(n2 = 55且n3 = 44) 我找不到一般的解决方案。
我可以将table1定义为table2。但是要为table2添加一个新名称,我们必须通过添加一个新列来更改table2的设计......有没有更好的解决方案?谢谢。
答案 0 :(得分:2)
您甚至不需要table2
,因为它可以使用数据透视查询从table1
生成:
SELECT id,
MAX(CASE WHEN name = 'n1' THEN value END) AS n1,
MAX(CASE WHEN name = 'n2' THEN value END) AS n2,
...
MAX(CASE WHEN name = 'nm' THEN value END) AS nm
FROM table1
GROUP BY id