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;
这使得添加您可能需要的其他值变得更容易