Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.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 - Fatal编程技术网

Sql 在一个查询中收集两个查询

Sql 在一个查询中收集两个查询,sql,sql-server,Sql,Sql Server,我可以在一个查询中收集这两个查询吗 INSERT INTO [dbo].[acceuil](libelle,value,categorie,param) SELECT 'Scom',count(*),'event','month1' FROM [dbo].[full] WHERE date_reception BETWEEN @StartDate AND @EndDate and event_class LIKE '%MOM%' INSERT INTO [dbo].[acceuil](l

我可以在一个查询中收集这两个查询吗

INSERT INTO [dbo].[acceuil](libelle,value,categorie,param)
SELECT 'Scom',count(*),'event','month1'
FROM [dbo].[full]
WHERE date_reception BETWEEN @StartDate AND @EndDate and event_class LIKE '%MOM%'

   INSERT INTO [dbo].[acceuil](libelle,value,categorie,param)
SELECT 'Spectrum',count(*),'event','month1'
FROM [dbo].[full]
WHERE date_reception BETWEEN @StartDate AND @EndDate and event_class LIKE '%SPECTRUM%'

这些查询之间的区别在于
(如“%Spectrum%”)
(选择Spectrum)
您可以使用
联合所有

    INSERT  INTO [dbo].[acceuil]
    ( libelle ,
      value ,
      categorie ,
      param
    )
    SELECT  'Scom' ,
            COUNT(*) ,
            'event' ,
            'month1'
    FROM    [dbo].[full]
    WHERE   date_reception BETWEEN @StartDate AND @EndDate
            AND event_class LIKE '%MOM%'

    UNION ALL

    SELECT  'Spectrum' ,
            COUNT(*) ,
            'event' ,
            'month1'
    FROM    [dbo].[full]
    WHERE   date_reception BETWEEN @StartDate AND @EndDate
            AND event_class LIKE '%SPECTRUM%'


您可以使用
UNION ALL

    INSERT  INTO [dbo].[acceuil]
    ( libelle ,
      value ,
      categorie ,
      param
    )
    SELECT  'Scom' ,
            COUNT(*) ,
            'event' ,
            'month1'
    FROM    [dbo].[full]
    WHERE   date_reception BETWEEN @StartDate AND @EndDate
            AND event_class LIKE '%MOM%'

    UNION ALL

    SELECT  'Spectrum' ,
            COUNT(*) ,
            'event' ,
            'month1'
    FROM    [dbo].[full]
    WHERE   date_reception BETWEEN @StartDate AND @EndDate
            AND event_class LIKE '%SPECTRUM%'


where
子句中的
基本上应该做您想做的事情:

INSERT INTO [dbo].[acceuil](libelle,value,categorie,param)
    SELECT (CASE WHEN event_class LIKE '%MOM%' THEN 'Scom'
                 WHEN event_class LIKE '%SPECTRUM%' THEN 'Spectrum'
            END), count(*), 'event', 'month1'
    FROM [dbo].[full]
    WHERE date_reception BETWEEN @StartDate AND @EndDate 
          (event_class LIKE '%MOM%' OR event_class LIKE '%SPECTRUM%')
    GROUP BY (CASE WHEN event_class LIKE '%MOM%' THEN 'Scom'
                   WHEN event_class LIKE '%SPECTRUM%' THEN 'Spectrum'
              END);
我意识到,您还需要一个
分组依据
来通过
libelle
进行聚合

编辑:

或许编写查询的更简单方法是:

INSERT INTO [dbo].[acceuil](libelle,value,categorie,param)
    SELECT libelle, count(*), 'event', 'month1'
    FROM (SELECT f.*,
                 (CASE WHEN event_class LIKE '%MOM%' THEN 'Scom'
                       WHEN event_class LIKE '%SPECTRUM%' THEN 'Spectrum'
                  END) as libelle
          FROM [dbo].[full] f
         ) f
    WHERE libelle IS NOT NULL
    GROUP BY libelle;

这样可以更容易地添加您可能要查找的其他值。

中的
where
子句基本上可以满足您的需要:

INSERT INTO [dbo].[acceuil](libelle,value,categorie,param)
    SELECT (CASE WHEN event_class LIKE '%MOM%' THEN 'Scom'
                 WHEN event_class LIKE '%SPECTRUM%' THEN 'Spectrum'
            END), count(*), 'event', 'month1'
    FROM [dbo].[full]
    WHERE date_reception BETWEEN @StartDate AND @EndDate 
          (event_class LIKE '%MOM%' OR event_class LIKE '%SPECTRUM%')
    GROUP BY (CASE WHEN event_class LIKE '%MOM%' THEN 'Scom'
                   WHEN event_class LIKE '%SPECTRUM%' THEN 'Spectrum'
              END);
我意识到,您还需要一个
分组依据
来通过
libelle
进行聚合

编辑:

或许编写查询的更简单方法是:

INSERT INTO [dbo].[acceuil](libelle,value,categorie,param)
    SELECT libelle, count(*), 'event', 'month1'
    FROM (SELECT f.*,
                 (CASE WHEN event_class LIKE '%MOM%' THEN 'Scom'
                       WHEN event_class LIKE '%SPECTRUM%' THEN 'Spectrum'
                  END) as libelle
          FROM [dbo].[full] f
         ) f
    WHERE libelle IS NOT NULL
    GROUP BY libelle;
这使得添加您可能需要的其他值变得更容易