带有AVG函数的嵌套查询和where子句中的DATEADD

时间:2014-05-24 15:44:00

标签: sql sql-server select nested

HI专家我第二天坚持这个查询  我有两个查询从一个视图中选择参数

  --Query A
  SELECT [ITEM_TYPE]
      ,[ITEM_NAME]

      ,AVG([ACT_VOL])      
  FROM [MyDb].[dbo].[VT_TOTALS]
  WHERE ITEM_TYPE = 'A'
  AND PROD_VOL != '0'
  AND PROD_VOL IS NOT NULL
  AND START_DATETIME >=DATEADD(day,-1, '20120420')
  group by [ITEM_TYPE],[ITEM_NAME]

--Query B
  SELECT [ITEM_TYPE]
      ,[ITEM_NAME] 
     ,AVG([ACT_VOL])      
  FROM [MyDb].[dbo].[VT_TOTALS]
  WHERE ITEM_TYPE = 'A'
  AND PROD_VOL != '0'
  AND PROD_VOL IS NOT NULL
  AND START_DATETIME >=DATEADD(day,-7, '20120420')
  AND START_DATETIME <='20120420'
  group by [ITEM_TYPE],[ITEM_NAME]

结果应该是 A. [ITEM_TYPE], A.[ITEM_NAME], A. AVG([ACT_VOL]),B. AVG([ACT_VOL]) 有帮助吗? 我试图从它们创建嵌套查询但不能这样做它不希望fork with where子句

2 个答案:

答案 0 :(得分:1)

试试这个:

SELECT A.ITEM_TYPE,A,ITEM_NAME,A.avgA,B.avgB
FROM
(
    SELECT [ITEM_TYPE]
          ,[ITEM_NAME]
          ,AVG([ACT_VOL]) as avgA     
    FROM [MyDb].[dbo].[VT_TOTALS]
    WHERE ITEM_TYPE = 'A'
      AND PROD_VOL != '0'
      AND PROD_VOL IS NOT NULL
      AND START_DATETIME >=DATEADD(day,-1, '20120420')
    group by [ITEM_TYPE],[ITEM_NAME]
) A FULL JOIN
(
    SELECT [ITEM_TYPE]
          ,[ITEM_NAME] 
         ,AVG([ACT_VOL]) as avgB     
    FROM [MyDb].[dbo].[VT_TOTALS]
    WHERE ITEM_TYPE = 'A'
      AND PROD_VOL != '0'
      AND PROD_VOL IS NOT NULL
      AND START_DATETIME >=DATEADD(day,-7, '20120420')
      AND START_DATETIME <='20120420'
    group by [ITEM_TYPE],[ITEM_NAME]
) B on A.ITEM_TYPE=B.ITEM_TYPE and A.ITEM_NAME=B.ITEM_NAME

答案 1 :(得分:1)

试试这个:

SELECT [ITEM_TYPE]
   , [ITEM_NAME] 
   , AVG([ACT_VOL]) AVG_A,
   , AVG(CASE WHEN START_DATETIME <='20120420' THEN ACT_VOL END) AVG_B
FROM [MyDb].[dbo].[VT_TOTALS]
WHERE ITEM_TYPE = 'A'
  AND PROD_VOL != '0'
  AND PROD_VOL IS NOT NULL
  AND START_DATETIME >=DATEADD(day,-7, '20120420')
GROUP BY [ITEM_TYPE],[ITEM_NAME]