2014-03-04 41 views
0

我创建一个视图,但我需要执行另一个选择来填充该视图的一列。这是我想使用视图的查询:创建一个包含另一个选择结果的列的视图

SELECT JOB, REL, PHASE, AVG(TCOUNT) AS AVGCOUNT, @NUMFRAMES AS NUMFRAMES, @NUMFRAMES/AVG(TCOUNT) AS REMAIN_DAYS 
FROM 
(SELECT 
    vwFRAME_TOTALS.JOB 
    ,vwFRAME_TOTALS.REL 
    ,vwFRAME_TOTALS.PHASE 
    ,vwFRAME_TOTALS.[DAY] 
    ,COUNT(vwFRAME_TOTALS.FR_ID) AS TCOUNT 
FROM 
    vwFRAME_TOTALS 
    GROUP BY JOB,REL,PHASE,DAY) 
AS COUNTS 
GROUP BY JOB, REL, PHASE 

和@NUMFRAMES来自另一个SELECT,就像这样:

SELECT @NUMFRAMES=count(*) FROM dbo.WFR 

我怎么能在一个语句做到这一点?

+0

公用表表达式可以使用:http://msdn.microsoft.com/en-us/library/ms175972.aspx –

回答

1
SELECT JOB, REL, PHASE, AVG(TCOUNT) AS AVGCOUNT, (SELECT count(*) FROM dbo.WFR) AS NUMFRAMES, (SELECT count(*) FROM dbo.WFR)/AVG(TCOUNT) AS REMAIN_DAYS 
FROM 
(SELECT 
    vwFRAME_TOTALS.JOB 
    ,vwFRAME_TOTALS.REL 
    ,vwFRAME_TOTALS.PHASE 
    ,vwFRAME_TOTALS.[DAY] 
    ,COUNT(vwFRAME_TOTALS.FR_ID) AS TCOUNT 
FROM 
    vwFRAME_TOTALS 
    GROUP BY JOB,REL,PHASE,DAY) 
AS COUNTS 
GROUP BY JOB, REL, PHASE 
+0

这结束了工作。我忘了你可以在查询的选择部分放置一个子查询。 – muttley91

0

由于我没有自己的模式,所以我很难测试,但是会有这样的工作吗?

SELECT JOB, REL, PHASE, AVG(TCOUNT) AS AVGCOUNT, NUMFRAMES, @NUMFRAMES/AVG(TCOUNT) AS REMAIN_DAYS 
FROM 
(SELECT 
    vwFRAME_TOTALS.JOB 
    ,vwFRAME_TOTALS.REL 
    ,vwFRAME_TOTALS.PHASE 
    ,vwFRAME_TOTALS.[DAY] 
    ,COUNT(vwFRAME_TOTALS.FR_ID) AS TCOUNT 
FROM 
    vwFRAME_TOTALS 
    GROUP BY JOB,REL,PHASE,DAY) 
AS COUNTS 
INNER JOIN (SELECT count(*) as NUMFRAMES FROM dbo.WFR) AS FRAMES 
ON 1=1 
GROUP BY JOB, REL, PHASE 
相关问题