如何在表的每一行中查找哪一列包含特定值
Posted
技术标签:
【中文标题】如何在表的每一行中查找哪一列包含特定值【英文标题】:How to find which column contains a specific value in a each row of a table 【发布时间】:2020-03-18 08:10:07 【问题描述】:我有一个表,其中的列是动态的,也就是说,有六列 C1、C2、C3、V1、V2、V3。
C1、C2、C3 包含一个字段,对应的值插入到 V1、V2、V3 中。
在一行中,field1 可以在 C2 列中,相应的值将在 V2 中。对于特定 ID(固定列)。 在下一行中,field1 可以在 C1 列中,对应的值将在 V1 中,用于不同的 ID。
在这种情况下,我们如何才能找到哪个列包含特定 ID 的 field1。
预期结果是
【问题讨论】:
使用具有适当 WHERE 的 UNION ALL 对您的数据进行 UNPUVOT,然后查询单对 (ID-C-V) 表。 请向我们展示您的预期结果。 这种问题是架构设计不佳的症状 @Strawberry 这是一个银行交易表,对于特定的 tnx,不同的字段不会同时出现。一旦其他当局确认,一些字段和值会在一天或两天后出现。 @VBoka 为预期结果编辑 【参考方案1】:规范化的模式可能看起来像这样...
id x c v
111 1 3 30
222 1 1 10
333 1 2 20
111 2 1 10
222 2 2 20
333 2 3 30
111 3 2 20
222 3 3 30
333 3 1 10
...可以在 (id,x) 上形成自然 PK
【讨论】:
【参考方案2】:在同一条记录中,field1只能在一个Cx Column中
SELECT id, CASE WHEN C1='Field1' THEN V1
WHEN C2='Field1' THEN V2
WHEN C3='Field1' THEN V3
ELSE NULL
END field1
FROM sourcetable
/* uncomment the next line
if 'Field1' value may be in none Cx column,
and you do not need in such records */
/* HAVING field1 IS NOT NULL */
【讨论】:
以上是关于如何在表的每一行中查找哪一列包含特定值的主要内容,如果未能解决你的问题,请参考以下文章