我能想到的至少有两个选项...
CREATE TABLE constants (
id AS INT,
Illustrated AS VARCHAR(3),
FrontPage AS VARCHAR(3),
BackPage AS VARCHAR(3),
EDLP AS VARCHAR(3),
SpecialPromo AS VARCHAR(3)
)
INSERT INTO constants SELECT 1, 'I', 'FP', 'BP', 'ELP', 'PR'
SELECT
Name,
CASE WHEN CHARINDEX(constants.Illustrated, data.S_Data) > 0 THEN 1 ELSE 0 END AS Illustrated,
etc, etc
FROM
data
INNER JOIN
constants
ON constants.id = 1
或者......
CREATE TABLE constants (
constant_set_id AS INT,
constant_name AS VARCHAR(16),
value AS AS VARCHAR(3)
)
INSERT INTO constants SELECT 1, 'Illustrated', 'I'
INSERT INTO constants SELECT 1, 'FrontPage', 'FP'
INSERT INTO constants SELECT 1, 'BackPage', 'BP'
INSERT INTO constants SELECT 1, 'EDLP', 'ELP'
INSERT INTO constants SELECT 1, 'SpecialPromo', 'PR'
SELECT
Name,
MAX(CASE WHEN constants.constant_name = 'Illustrated' AND CHARINDEX(constants.value, data.S_Data) > 0 THEN 1 ELSE 0 END) AS Illustrated,
etc, etc
FROM
data
INNER JOIN
constants
ON constants.constant_set_id = 1
GROUP BY
data.name
都让你拥有多组不同的常量。一种是在不改变模式的情况下可扩展的,尽管查询仍然需要改变。
这两种方法的主要优点是,您可以重复使用其他常量,但将它们一次存储在中央位置。只有当/常量中的值需要更新时才适用。通过间接再利用。
不知道你有多少收获,因为我假设你还是要硬编码的列名('Illustrated', 'FrontPage'等)与结果集中的值关联。 – 2012-01-11 15:51:46
如何为这个选择创建一个视图? – 2012-01-11 15:53:37
那就是我的想法 - 即“值得吗?” – Perplexed 2012-01-11 15:54:56