-- first select the model codes.
WITH models AS
(
SELECT DISTINCT MODEL_CODE
FROM TABLENAME
), val_list AS
(
-- then left join back to the table and pick the style or default.
SELECT m.MODEL_CODE, COALESCE(x.PRICE,d.PRICE) AS PRICE
FROM models m
LEFT JOIN TABLENAME d ON d.MODEL_CODE = m.MODEL_CODE AND d.STYLE_CODE = 'STD'
LEFT JOIN TABLENAME x ON x.MODEL_CODE = m.MODEL_CODE AND x.STYLE_CODE = 'FEL'
),
SELECT SUM(PRICE)
FROM val_list
注意,如果你不能使用CTE下面会做同样的事情:
SELECT SUM(PRICE)
FROM (
SELECT m.MODEL_CODE, COALESCE(x.PRICE,d.PRICE) AS PRICE
FROM (SELECT DISTINCT MODEL_CODE FROM TABLENAME) m
LEFT JOIN TABLENAME d ON d.MODEL_CODE = m.MODEL_CODE AND d.STYLE_CODE = 'STD'
LEFT JOIN TABLENAME x ON x.MODEL_CODE = m.MODEL_CODE AND x.STYLE_CODE = 'FEL'
) val_list
要看到这是如何工作的,你可以看看不同的部分 - 尝试
-- first select the model codes.
WITH models AS
(
SELECT DISTINCT MODEL_CODE
FROM TABLENAME
)
SELECT m.MODEL_CODE, x.PRICE, d.PRICE
FROM models m
LEFT JOIN TABLENAME d ON d.MODEL_CODE = m.MODEL_CODE AND d.STYLE_CODE = 'STD'
LEFT JOIN TABLENAME x ON x.MODEL_CODE = m.MODEL_CODE AND x.STYLE_CODE = 'FEL'
和
-- first select the model codes.
WITH models AS
(
SELECT DISTINCT MODEL_CODE
FROM TABLENAME
), val_list AS
(
-- then left join back to the table and pick the style or default.
SELECT m.MODEL_CODE, COALESCE(x.PRICE,d.PRICE) AS PRICE
FROM models m
LEFT JOIN TABLENAME d ON d.MODEL_CODE = m.MODEL_CODE AND d.STYLE_CODE = 'STD'
LEFT JOIN TABLENAME x ON x.MODEL_CODE = m.MODEL_CODE AND x.STYLE_CODE = 'FEL'
)
SELECT *
FROM val_list
你有刺过它自己吗?如果是这样,你正在处理的查询有什么问题? – 2015-02-10 15:21:05
您正在使用哪种RDBMS? – SoulTrain 2015-02-10 15:21:15
我们正在使用Microsoft SQL Server。我是非常新的SQL,迄今为止我所能获得的最好结果是返回目标行和STD行上的价格总和。 – acmowad 2015-02-10 15:27:45