SQL PIVOT 是一种将行数据转换为列数据的操作,常用于数据透视和交叉表报表生成。在 PIVOT 操作中,当某些行没有对应的列值时,结果中会出现 NULL 值。
在报表展示或数据分析中,NULL 值可能会:
SELECT
[行标识列],
COALESCE([透视列1], 0) AS [列1别名],
COALESCE([透视列2], 'N/A') AS [列2别名],
ISNULL([透视列3], 0) AS [列3别名]
FROM (
SELECT [行标识列], [透视列], [值列]
FROM 源表
) AS SourceTable
PIVOT (
SUM([值列])
FOR [透视列] IN ([透视列1], [透视列2], [透视列3])
) AS PivotTable;
SELECT
[行标识列],
[透视列1], [透视列2], [透视列3]
FROM (
SELECT
[行标识列],
[透视列],
ISNULL([值列], 0) AS [值列] -- 在PIVOT前替换NULL
FROM 源表
) AS SourceTable
PIVOT (
SUM([值列])
FOR [透视列] IN ([透视列1], [透视列2], [透视列3])
) AS PivotTable;
SELECT
[行标识列],
CASE WHEN [透视列1] IS NULL THEN 0 ELSE [透视列1] END AS [列1别名],
CASE WHEN [透视列2] IS NULL THEN 'N/A' ELSE [透视列2] END AS [列2别名]
FROM (
SELECT [行标识列], [透视列], [值列]
FROM 源表
) AS SourceTable
PIVOT (
SUM([值列])
FOR [透视列] IN ([透视列1], [透视列2])
) AS PivotTable;
SELECT
[行标识列],
IIF([透视列1] IS NULL, 0, [透视列1]) AS [列1别名],
IIF([透视列2] IS NULL, 'N/A', [透视列2]) AS [列2别名]
FROM (
SELECT [行标识列], [透视列], [值列]
FROM 源表
) AS SourceTable
PIVOT (
SUM([值列])
FOR [透视列] IN ([透视列1], [透视列2])
) AS PivotTable;
SELECT
[行标识列],
IFNULL([透视列1], 0) AS 列1别名,
IFNULL([透视列2], 'N/A') AS 列2别名
FROM (
-- PIVOT模拟查询
) AS PivotTable;
SELECT
[行标识列],
COALESCE([透视列1], 0) AS 列1别名,
COALESCE([透视列2], 'N/A') AS 列2别名
FROM crosstab(
'SELECT [行标识列], [透视列], [值列] FROM 源表'
) AS ct([行标识列] 类型, [透视列1] 类型, [透视列2] 类型);
SELECT
[行标识列],
NVL([透视列1], 0) AS 列1别名,
NVL([透视列2], 'N/A') AS 列2别名
FROM (
SELECT [行标识列], [透视列], [值列]
FROM 源表
)
PIVOT (
SUM([值列])
FOR [透视列] IN ('值1' AS [透视列1], '值2' AS [透视列2])
);
没有搜到相关的文章