Sql 有没有办法缩短此查询?
我有这样一个问题:Sql 有没有办法缩短此查询?,sql,sql-server,database,tsql,Sql,Sql Server,Database,Tsql,我有这样一个问题: SELECT Name, REPLACE(RTRIM(( SELECT CAST(Score AS VARCHAR(MAX)) + ' ' FROM (SELECT Name, Score FROM table WHERE ---CONDITIO
SELECT Name,
REPLACE(RTRIM((
SELECT CAST(Score AS VARCHAR(MAX)) + ' '
FROM
(SELECT Name, Score
FROM table
WHERE
---CONDITIONS---
) AS InnerTable
WHERE (InnerTable.Name = OuterTable.Name) FOR XML PATH (''))),' ',', ') AS Scores
FROM table AS OuterTable
WHERE
---CONDITIONS---
GROUP BY Name;
可以看出,我使用相同的条件集来推导
内部表
和外部表
。有没有办法缩短此查询?我问这个问题是因为,不久前,我在MySQL中看到了一个关键字使用
,它简化了我的生活,您可以使用它指定一次查询,然后在其余的查询中使用它的别名。您可以看看创建一个公共表表达式(CTE)。这是为选定对象添加别名的最佳选择。不幸的是,我不确定它会使您的查询变得多么糟糕,尽管它确实会阻止您两次定义where条件。见下文:
with temp as
(
SELECT Name, Score
FROM table
WHERE whatever = 'whatever'
)
SELECT Name,
REPLACE(RTRIM((
SELECT CAST(Score AS VARCHAR(MAX)) + ' '
FROM
(SELECT Name, Score
FROM temp ) AS InnerTable
WHERE (InnerTable.Name = OuterTable.Name) FOR XML PATH (''))),' ',', ') AS Scores
FROM temp AS OuterTable
GROUP BY Name;
+谢谢你抽出时间。我想这就是我需要的。这使我的查询更具可读性。当计时器过期时,我将接受此作为答案。:)