Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 有没有办法缩短此查询?_Sql_Sql Server_Database_Tsql - Fatal编程技术网

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;

+谢谢你抽出时间。我想这就是我需要的。这使我的查询更具可读性。当计时器过期时,我将接受此作为答案。:)