SQL Server 2000:有条件的旋转
SQL Server 2000: Pivot with conditions
我四处搜索但找不到类似的答案。
在排除 NULL 和 'NA' 字符串的条件下,在 SQL Server 2000 中推荐的最佳转换方法是什么?
我想从这个开始(select 只有 order_id = 100 和 line_no = 1):
+----------+---------+-----+------+-----+------+----+
| order_id | line_no | a | b | c | d | e |
+----------+---------+-----+------+-----+------+----+
| 100 | 1 | 123 | NULL | NA | 456 | X1 |
| 101 | 1 | 789 | NA | 123 | NULL | BB |
+----------+---------+-----+------+-----+------+----+
为此:
+----------+---------+------+--------+
| order_id | line_no | type | config |
+----------+---------+------+--------+
| 100 | 1 | a | 123 |
| 100 | 1 | d | 456 |
| 100 | 1 | e | X1 |
+----------+---------+------+--------+
在SQL Server 2000 中,可用的选项不多。您可以为此使用 UNION ALL
:
SELECT 'a' AS type, a
FROM mytable
WHERE a IS NOT NULL AND a <> 'NA'
UNION ALL
SELECT 'b' AS type, b
FROM mytable
WHERE b IS NOT NULL AND b <> 'NA'
UNION ALL
SELECT 'c' AS type, c
FROM mytable
WHERE c IS NOT NULL AND c <> 'NA'
UNION ALL
SELECT 'd' AS type, d
FROM mytable
WHERE d IS NOT NULL AND d <> 'NA'
我四处搜索但找不到类似的答案。
在排除 NULL 和 'NA' 字符串的条件下,在 SQL Server 2000 中推荐的最佳转换方法是什么?
我想从这个开始(select 只有 order_id = 100 和 line_no = 1):
+----------+---------+-----+------+-----+------+----+
| order_id | line_no | a | b | c | d | e |
+----------+---------+-----+------+-----+------+----+
| 100 | 1 | 123 | NULL | NA | 456 | X1 |
| 101 | 1 | 789 | NA | 123 | NULL | BB |
+----------+---------+-----+------+-----+------+----+
为此:
+----------+---------+------+--------+
| order_id | line_no | type | config |
+----------+---------+------+--------+
| 100 | 1 | a | 123 |
| 100 | 1 | d | 456 |
| 100 | 1 | e | X1 |
+----------+---------+------+--------+
在SQL Server 2000 中,可用的选项不多。您可以为此使用 UNION ALL
:
SELECT 'a' AS type, a
FROM mytable
WHERE a IS NOT NULL AND a <> 'NA'
UNION ALL
SELECT 'b' AS type, b
FROM mytable
WHERE b IS NOT NULL AND b <> 'NA'
UNION ALL
SELECT 'c' AS type, c
FROM mytable
WHERE c IS NOT NULL AND c <> 'NA'
UNION ALL
SELECT 'd' AS type, d
FROM mytable
WHERE d IS NOT NULL AND d <> 'NA'