我想为每个空值创建新行。例如:
数据Origen表:该表具有两个空值(阿迪达斯,耐克),我想在id_brand为空时为每个id_brand创建新值
公式 计数具有空值的id_brand * 不具有空值的id_brand
6个新行= 2个空值* 3个非空值
表
+-------------+-------------+----------+-------+
| id_category | description | id_brand | value |
+-------------+-------------+----------+-------+
| 5 | adidas | | 100 |
| 5 | nike | | 65 |
| 5 | samsung | 1 | 40 |
| 5 | coca-cola | 2 | 15 |
| 5 | puma | 3 | 70 |
+-------------+-------------+----------+-------+
我期望的数据表,当前行和新的6行(每个ID_brand的值都不为空)
+-------------+-------------+----------+-------+
| id_category | description | id_brand | value |
+-------------+-------------+----------+-------+
| 5 | adidas | | 100 |
| 5 | nike | | 65 |
| 5 | samsung | 1 | 40 |
| 5 | coca-cola | 2 | 15 |
| 5 | puma | 3 | 70 |
+-------------+-------------+----------+-------+
| 5 | adidas | 1 | 100 |
| 5 | nike | 1 | 65 |
| 5 | adidas | 2 | 100 |
| 5 | nike | 2 | 65 |
| 5 | adidas | 3 | 100 |
| 5 | nike | 3 | 65 |
+-------------+-------------+----------+-------+
如何在Sql中完成类似的事情?
答案 0 :(得分:0)
只要仅用于报告,并且您完全确定这是必需的,则可以使用简单的CROSS JOIN完成。我正在以消耗性格式添加示例数据,这是在SQL中寻求帮助时发布该数据的最佳方法。
CREATE TABLE SampleData(
id_category int,
description varchar(100),
id_brand int,
value int
)
INSERT INTO SampleData
VALUES
(5, 'adidas ', NULL, 100),
(5, 'nike ', NULL, 65),
(5, 'samsung ', 1, 40),
(5, 'coca-cola', 2, 15),
(5, 'puma ', 3, 70);
SELECT d.id_category,
d.description,
b.id_brand,
d.value
FROM SampleData d
CROSS JOIN SampleData b
WHERE b.id_brand IS NOT NULL
AND d.id_brand IS NULL
ORDER BY id_brand, description;