[英]How to get a proper name from the dictionary table in sql-query
我陷入了下一个情况。 我有两个表,表“数据”和表“字典”。
表格“数据”的每一行都是关于产品的信息。 在这一行中存在 10 列不包括其他列,分别命名为“cat1”、“cat2”...“cat10”。 这些列可能包含 INT 值或 NULL 值。
“数据”表如下所示:
product_id | 产品名称 | 价格 | 猫1 | 猫2 | ... | 猫 10 |
---|---|---|---|---|---|---|
13 | 香蕉 | 3.5 | 12 | 32 | ... | 无效的 |
“字典”表包含每个类别的专有名称:
cat_id | 猫名 |
---|---|
12 | 水果 |
32 | 吃 |
我的主要目标是编写一个如下所示的查询:
产品名称 | 类别 |
---|---|
香蕉 | 水果,吃 |
我尝试使用 CONCAT(),但如果我们有 NULL 值,它就不起作用。 谁能帮我创建 SQL 语句来获取它?
首先应该将列cat1
.. cat10
转为多行,然后加入Dictionary
表,最后使用LISTAGG聚合结果:
WITH cte AS (
SELECT *
FROM Data d
UNPIVOT (cat_id for category IN (cat1, cat2, ... cat10)
)
SELECT c.product_id, c.product_name, LISTAGG(d.cat_name, ',') AS categories
FROM cte c
JOIN "Dictionary" d
ON c.cat_id = d.cat_id
GROUP BY c.product_id, c.product_name;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.