Mysql 需要sql或存储过程根据标志获取数据吗?
Ex-我有如下表名\u类型- 第二个表A如下所示- 需要结果集如下- 描述 在第二个表中,T_ID和T_值是唯一的。 我只需要名称\类型\代码作为结果中的列名,表\ A中的值为1。 例如,与名称\u类型\u代码DN一样,任何T\u ID都没有值 对于CN也是一样,因为我们的值为0,所以我们不需要。您可能更喜欢使用解码作为:Mysql 需要sql或存储过程根据标志获取数据吗?,mysql,sql,sql-server,oracle,Mysql,Sql,Sql Server,Oracle,Ex-我有如下表名\u类型- 第二个表A如下所示- 需要结果集如下- 描述 在第二个表中,T_ID和T_值是唯一的。 我只需要名称\类型\代码作为结果中的列名,表\ A中的值为1。 例如,与名称\u类型\u代码DN一样,任何T\u ID都没有值 对于CN也是一样,因为我们的值为0,所以我们不需要。您可能更喜欢使用解码作为: 根据这两个输入表,我不知道你是如何得到输出的。你能解释一下为什么6个代码中只有4个最终成为列名吗?为什么重复的行,不是这样的数据透视点将所有数据收集在一行中吗?@Joakim
根据这两个输入表,我不知道你是如何得到输出的。你能解释一下为什么6个代码中只有4个最终成为列名吗?为什么重复的行,不是这样的数据透视点将所有数据收集在一行中吗?@JoakimDanielson我们还有其他列和值,它们也是唯一的,比如T1,我们有两个值A和B,我没有在这里添加。@TimBiegeleisen我需要不同的名称\u类型\u代码作为结果中的列名,仅当值1出现在表\u A.Ex中时。与名称\u类型\u代码DN类似,任何T\u ID都没有值,与CN相同,就像我们有值0,所以我们不需要。删除此问题,然后再次发布,确保清楚地解释您的逻辑。解释SQL查询的最佳方法是显示最小的输入和预期的输出。您不一定需要如此复杂的查询/数据集来获得如何解决问题的帮助。是否有选项可以删除硬代码名称\u类型,如decoden.code、'AN',a.value,0作为存储过程,这里对我也有好处。@AnshulDubey不幸的是,没有。
+--------------+----------+
| Name_Type_Id | Code |
+--------------+----------+
| 1 | AN |
| 2 | BN |
| 3 | CN |
| 4 | DN |
| 5 | EN |
| 6 | FN |
+--------------+----------+
+-------+---------+--------------+------------------+
| T_ID | T_Value | Name_Type_Id | Name_Type_Value |
+-------+---------+--------------+------------------+
| T1 | A | 1 | 1 |
| T1 | B | 3 | 0 |
| T2 | A | 2 | 1 |
| T2 | B | 5 | 1 |
| T2 | C | 6 | 1 |
| T3 | A | 1 | 0 |
| T3 | B | 6 | 1 |
| T4 | A | 1 | 0 |
| T5 | A | 2 | 1 |
+-------+---------+--------------+------------------+
+-------+---------+------+------+-------+-----+
| T_ID | T_Value | AN | BN | EN | FN |
+-------+---------+------+------+-------+-----+
| T1 | A | 1 | 0 | 0 | 0 |
| T1 | B | 0 | 0 | 0 | 0 |
| T2 | A | 0 | 1 | 0 | 0 |
| T2 | B | 0 | 0 | 1 | 0 |
| T2 | C | 0 | 0 | 0 | 1 |
| T3 | A | 0 | 0 | 0 | 0 |
| T3 | B | 0 | 0 | 0 | 1 |
| T4 | A | 0 | 0 | 0 | 0 |
| T5 | A | 0 | 1 | 0 | 0 |
+-------+---------+------+------+-------+-----+
select a.t_id, a.T_Value,
decode(n.code,'AN',a.value,0) as "AN",
decode(n.code,'BN',a.value,0) as "BN",
decode(n.code,'EN',a.value,0) as "EN",
decode(n.code,'FN',a.value,0) as "FN"
from Table_A a
left join Name_Type n
on ( n.name_type_id = a.name_type_id )
group by a.t_id, a.T_Value, a.value, n.code
order by a.t_id, a.T_Value;
T_ID T_VALUE AN BN EN FN
T1 A 0 0 0 0
T1 B 1 0 0 0
T2 A 0 1 0 0
T2 B 0 0 1 0
T2 C 0 0 0 1
T3 A 0 0 0 0
T3 B 0 0 0 1
T4 A 0 0 0 0
T5 A 0 1 0 0