我在 CALC 中有一个以下矩阵:第一行 (1) 包含员工编号,第一列 (A) 包含产品代码。 到处都有一个 X,表明产品是由上面相应的员工出售的
| 0302 | 0303 | 0304 | 0402 |
1625 | X | | X | X |
1643 | | X | X | |
...
我们看到产品 1643 是由员工 0303 和 0304 销售的
我想看到的是哪些员工销售的产品的列表,但格式如下:
1625 | 0302, 0304, 0402 |
1643 | 0303, 0304 |
这样做的原因是我们需要将此矩阵最终导入到 SQL SERVER 表中。我们无法得知这个矩阵的起源。它包含约 50 名员工和 9000 多种产品。
感谢您与我们一起思考!
最佳答案
尝试这样的事情
;with data as
(
SELECT *
FROM ( VALUES (1625,'X',NULL,'X','X'),
(1643,NULL,'X','X',NULL))
cs (col1, [0302], [0303], [0304], [0402])
),cte
AS (SELECT col1,
col
FROM data
CROSS apply (VALUES ('0302',[0302]),
('0303',[0303]),
('0304',[0304]),
('0402',[0402])) cs (col, val)
WHERE val IS NOT NULL)
SELECT col1,
LEFT(cs.col, Len(cs.col) - 1) AS col
FROM cte a
CROSS APPLY (SELECT col + ','
FROM cte B
WHERE a.col1 = b.col1
FOR XML PATH('')) cs (col)
GROUP BY col1,
LEFT(cs.col, Len(cs.col) - 1)
关于sql-server - 根据矩阵找到有效组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34130850/