根据select SQL Server上其他列的条件添加计算列

根据select SQL Server上其他列的条件添加计算列,sql,sql-server,Sql,Sql Server,我需要根据其他列的条件,根据计算添加一些列 例如,我有: EVENT_ID Color WinnerPrice WinnerCount 0 to 5 5 to 15 15 to 50 BSP ---------------------- ------

我需要根据其他列的条件,根据计算添加一些列

例如,我有:

EVENT_ID               Color              WinnerPrice            WinnerCount 0 to 5                              5 to 15                              15 to 50                              BSP
---------------------- ------------ ------------- ---------------------- ----------- ----------------------------------- ------------------------------------ ------------------------------------- ----------------------
138386456              red 1                      8.707157072            1           sum of BSP when BSP between 0 and 5 sum of BSP when BSP between 5 and 15 sum of BSP when BSP between 15 and 50 8.707157072
138386458              blue         1             101.7549557            1           sum of BSP when BSP between 0 and 5 sum of BSP when BSP between 5 and 15 sum of BSP when BSP between 15 and 50 101.7549557
138386460              yellow 1                   7.532110284            1           sum of BSP when BSP between 0 and 5 sum of BSP when BSP between 5 and 15 sum of BSP when BSP between 15 and 50 7.532110284
138386464              other fields 1             52.34970073            1           sum of BSP when BSP between 0 and 5 sum of BSP when BSP between 5 and 15 sum of BSP when BSP between 15 and 50 52.34970073
138386468              other fields 1             35.86681076            1           sum of BSP when BSP between 0 and 5 sum of BSP when BSP between 5 and 15 sum of BSP when BSP between 15 and 50 35.86681076
138386468              other fields 1             44                     1           sum of BSP when BSP between 0 and 5 sum of BSP when BSP between 5 and 15 sum of BSP when BSP between 15 and 50 44
138386470              other fields 1             32                     1           sum of BSP when BSP between 0 and 5 sum of BSP when BSP between 5 and 15 sum of BSP when BSP between 15 and 50 32
138386474              other fields 1             55.55523634            1           sum of BSP when BSP between 0 and 5 sum of BSP when BSP between 5 and 15 sum of BSP when BSP between 15 and 50 55.55523634
图像版本:

我怎样才能以一种高效的方式做到这一点?我必须添加几种这种类型的计算查询,但我不知道如何以一种高效的方式进行(我想可能是通过汇总完成的,但没有得到它)

我也尝试过为它做一个标量函数,但它似乎只是将逻辑移出了视图,因为它的性能仍然很差

条件是BSP字段的总和,该字段由一个现在未显示的字段分组

  • 当bsp介于0和5之间时,0到5之间的列应具有bsp之和,并按颜色为“红色”时分组
  • 当bsp在5到15之间时,5到15之间的列应具有bsp之和,bsp按颜色分组='蓝色'
  • 当bsp在15到50之间按颜色分组时,15到50之间的列应具有bsp之和='黄色'
获取0和5之间的所有内容的现有查询示例如下:

SELECT 
    tblData.MENU_HINT, tblData.EVENT_NAME, 
    SUM(tblData.BSP) AS [Sum], 
    COUNT(tblData.ID) AS [count], 
    AVG(tblData.BSP) AS AVerage, 
    tblData.EVENT_ID
FROM 
    tblData
WHERE 
    (((tblData.BSP) > 0 AND (tblData.BSP) <= 5))
GROUP BY 
    tblData.MENU_HINT, tblData.EVENT_NAME, tblData.EVENT_ID;
选择
tblData.MENU\u提示,tblData.EVENT\u名称,
总和(tblData.BSP)为[总和],
计数(tblData.ID)为[计数],
平均值(tblData.BSP)作为平均值,
tblData.EVENT\u ID
从…起
tblData
哪里

(((tblData.BSP)>0和(tblData.BSP)我认为您需要条件聚合。我有点搞不清楚您到底需要哪种计算,但想法是:

SELECT t.MENU_HINT, t.EVENT_ID, t.EVENT_NAME,
       SUM(CASE WHEN t.BSP >= 0 AND t.BSP < 5 THEN t.BSP END) as sum_0_5,
       SUM(CASE WHEN t.color = 'Red' AND t.BSP >= 0 AND t.BSP < 5 THEN t.BSP END) as sum_red_0_5,
       . . . And so on for the calculations you want
FROM tblData t
GROUP BY t.MENU_HINT, t.EVENT_NAME, t.EVENT_ID;
选择t.MENU\u提示、t.EVENT\u ID、t.EVENT\u名称,
求和(当t.BSP>=0且t.BSP<5时,则t.BSP结束)作为求和0,5,
求和(当t.color='Red'和t.BSP>=0,t.BSP<5,则t.BSP结束时的情况)为求和红色0,5,
…等等,以便进行您想要的计算
来自tblData t
按t.MENU\u提示、t.EVENT\u名称、t.EVENT\u ID分组;

这里的大多数人都希望样本表数据和预期结果是格式化文本,而不是图像。(我看不懂那微小的图像文本…)你完全正确,谢谢你的提示,我现在将进行编辑,以这种方式显示,同时,如果你单击图像,将显示完整大小的图像。但我将按照建议进行编辑什么是“颜色”?我修复了它,是其中一列,是一个例子,展示了我必须使用的一些条件。我得到了这个,但它会被执行吗?我必须计算大量记录和几个列(大约80个)我知道从一开始就做不是最好的方法,但我认为在这里做得更大会更少performant@Baldie47…性能与任何聚合一样。我认为您在想做什么方面没有太多选择。好吧,它确实解决了问题,我不能抱怨,呵呵,我想是过了(分区)函数…我正试图找出如何使用它,但我没有sure@Baldie47…如果您确实需要进行聚合,那么窗口函数将更加昂贵。