我正在尝试分解并合并这样的表的结果。 (对于 Bingo!)我可以轻松地编写 CASE,以按第一个字母将列分开。然而,我最终显示的是空值,因为行被其 ID 视为不同的行。我在这里尝试了一些合并示例,但似乎被难住了。 ID 并不重要,我可以控制初始数据的收集方式。
ID | Number |
====================
1 | N6 |
2 | B22 |
3 | B5 |
4 | I9 |
5 | N4 |
B | I | N | G | O |
============================
B5 | I9 | N4 | -- | -- |
B22| -- | N6 | -- | -- |
最佳答案
;WITH CTE AS
(
SELECT *,
LEFT([Number],1) AS Letter,
ROW_NUMBER() OVER (PARTITION BY LEFT([Number],1)
ORDER BY CAST(SUBSTRING([Number],2,2) AS INT) ) AS RN
FROM Table1
)
SELECT
MAX(CASE WHEN Letter = 'B' THEN [Number] END) AS B,
MAX(CASE WHEN Letter = 'I' THEN [Number] END) AS I,
MAX(CASE WHEN Letter = 'N' THEN [Number] END) AS N,
MAX(CASE WHEN Letter = 'G' THEN [Number] END) AS G,
MAX(CASE WHEN Letter = 'O' THEN [Number] END) AS O
FROM CTE
GROUP BY RN
关于SQL 合并行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14571836/