在我的表格中,我的数据如下:
incidents custname startdate enddate desc
6 custA 11/11/2013 11/11/2014 prod1 mod1
2 custA 11/11/2013 11/11/2014 prod1 mod2
2 custA 11/11/2013 11/11/2014 prod1 mod3
2 custA 11/11/2013 11/11/2014 prod1 mod4
6 custA 11/11/2013 11/11/2014 prod2 mod1
2 custA 11/11/2013 11/11/2014 prod2 mod2
2 custA 11/11/2013 11/11/2014 prod2 mod3
2 custA 11/11/2013 11/11/2014 prod2 mod4
可能超过4,但为了简单起见,我们可以限制它。
现在我想做的是每个产品只选择一行,其中所有模块的事件数总和。所以例如我想要的输出应该是这样的:
incidents custname startdate enddate desc
12 custA 11/11/2013 11/11/2014 prod1 all mods
12 custA 11/11/2013 11/11/2014 prod2 all mods
我知道该怎么做,或者我甚至可以做这样的事情。描述字段是一个文本字段(nvarchar),所以要获得产品,它需要使用LIKE甚至找出它是正确的产品?
所以问题是,这可能吗?如果可能的话,给我一个链接,我可以阅读有关如何实现这一目标的地方,我不知道从哪里开始......
谢谢!
答案 0 :(得分:1)
将说明拆分为两个,以便按产品分组:
;WITH cte AS (
SELECT incidents, custname, startdate, enddate
, LEFT(descr, CHARINDEX(' ',descr)) AS prod
, RIGHT(descr, CHARINDEX(' ',REVERSE(descr))) AS Prod_Mod
FROM Table1
)
SELECT SUM(incidents) AS Incidents
,custname
,startdate
,enddate
,prod
,COUNT(distinct Prod_Mod) AS Mod_Count
FROM cte
GROUP BY custname
,startdate
,enddate
,prod
演示:SQL Fiddle
注意:如果产品跨越多个日期,您可能不希望对所有这些字段进行分组,例如,您可能需要最小/最大日期并将其从组中删除。
更新:听起来你需要更复杂的逻辑来拆分描述字段,考虑使用CASE
语句:
CASE WHEN descr LIKE '%something%' THEN 'prod1'
WHEN descr LIKE '%somethingelse%' THEN 'prod2'
....
ELSE 'noprod'
END