sql-server - 根据矩阵找到有效组合

标签 sql-server t-sql ssis libreoffice calc

我在 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/

相关文章:

c# - ssis 脚本将 System.DateTime 转换为 DT_DBTIMESTAMP 但不转换为 DT_DBTIMESTAMP2

excel - SSIS:根据 Web 查询结果以编程方式创建新的 Excel 文件 - 如何保存 Web 查询表名称?

arrays - 作为变量的 SSIS 字符串数组

c# - 无法让 SSIS 脚本任务工作

sql - 如何检索选择查询的列标题?

c# - 创建复杂查询以执行存储在列中的查询?

sql-server - 在 Linux 上迁移到新的 SQL Server 2017

sql-server-2005 - 在 T-SQL 中不使用变量直接引用列值

t-sql - 全文搜索 CONTAINS 子句是否始终被评估?

t-sql - UNION ALL 可以比 JOIN 更快吗?还是我的 JOIN 很糟糕?