Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.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,我有以下疑问: WITH CTE_TblData as( SELECT td.EVENT_ID, td.BSP, td.WIN_LOSE, (SELECT count(*) FROM dbo.tblData td2 WHERE td2.EVENT_ID =td.EVENT_ID) AS [CountRunners], SUM(CASE WHEN td.EVENT_ID = td.EVENT_ID THEN

我有以下疑问:

 WITH CTE_TblData as(
   SELECT 
     td.EVENT_ID, 
     td.BSP,
     td.WIN_LOSE,
     (SELECT count(*) 
      FROM dbo.tblData td2 
      WHERE td2.EVENT_ID =td.EVENT_ID) AS [CountRunners],
     SUM(CASE WHEN td.EVENT_ID = td.EVENT_ID THEN 1  END) AS [Total Runners], 
     SUM(CASE WHEN td.WIN_LOSE = 1 THEN td.BSP  END) AS [WinnerPrice],
     SUM(CASE WHEN td.WIN_LOSE = 1 THEN 1 END) AS [WinnerCount]
   FROM tblData td
   WHERE td.EVENT_ID IN(146325086)
   GROUP BY td.EVENT_ID, td.BSP, td.WIN_LOSE
 )
SELECT td.event_id, 
    sum(case when td.event_id = td.event_id THEN 1 END) AS [Total Runners],
    sum(case when td.WinnerPrice IS NOT NULL THEN td.WinnerPrice END) AS [WinnerPrice],
    sum(case when td.WinnerCount IS NOT NULL THEN td.WinnerCount END) AS [WinnerCount],


    count(CASE WHEN td.BSP >13 AND td.BSP <=21 AND td.WIN_LOSE = 0 AND td.[Total Runners] >0 AND td.[Total Runners] <=1 THEN td.BSP END) AS Count13to21Runners0to1,
    sum(CASE WHEN td.BSP >13 AND td.BSP <=21 AND td.WIN_LOSE = 0 AND td.[Total Runners] >0 AND td.[Total Runners] <=1 THEN td.BSP END) AS Sum13to21Runners0to1,

    count(CASE WHEN td.BSP >13 AND td.BSP <=21 AND td.WIN_LOSE = 0 AND td.[Total Runners] >=2 AND td.[Total Runners] <=3 THEN td.BSP END) AS Count13to21Runners2to3,
    sum(CASE WHEN td.BSP >13 AND td.BSP <=21 AND td.WIN_LOSE = 0 AND td.[Total Runners] >=2 AND td.[Total Runners] <=3 THEN td.BSP END) AS Sum13to21Runners2to3

    FROM CTE_TblData td
WHERE td.EVENT_ID =146325086
GROUP BY td.event_id,  [Total Runners]
然而,我似乎有一个错误,在逻辑的情况下,计算每个领域的跑步者。让我解释一下:

开始时的CTE结果为

╔═══════════╦════════╦══════════╦══════════════╦═══════════════╦═════════════╦═════════════╗
║ EVENT_ID  ║ BSP    ║ WIN_LOSE ║ CountRunners ║ Total Runners ║ WinnerPrice ║ WinnerCount ║
╠═══════════╬════════╬══════════╬══════════════╬═══════════════╬═════════════╬═════════════╣
║ 146325086 ║ 7.09   ║ 0        ║ 13           ║ 1             ║ NULL        ║ NULL        ║
╠═══════════╬════════╬══════════╬══════════════╬═══════════════╬═════════════╬═════════════╣
║ 146325086 ║ 9.52   ║ 0        ║ 13           ║ 1             ║ NULL        ║ NULL        ║
╠═══════════╬════════╬══════════╬══════════════╬═══════════════╬═════════════╬═════════════╣
║ 146325086 ║ 9.75   ║ 0        ║ 13           ║ 1             ║ NULL        ║ NULL        ║
╠═══════════╬════════╬══════════╬══════════════╬═══════════════╬═════════════╬═════════════╣
║ 146325086 ║ 12.11  ║ 0        ║ 13           ║ 1             ║ NULL        ║ NULL        ║
╠═══════════╬════════╬══════════╬══════════════╬═══════════════╬═════════════╬═════════════╣
║ 146325086 ║ 13.27  ║ 0        ║ 13           ║ 1             ║ NULL        ║ NULL        ║
╠═══════════╬════════╬══════════╬══════════════╬═══════════════╬═════════════╬═════════════╣
║ 146325086 ║ 17.57  ║ 0        ║ 13           ║ 1             ║ NULL        ║ NULL        ║
╠═══════════╬════════╬══════════╬══════════════╬═══════════════╬═════════════╬═════════════╣
║ 146325086 ║ 28.25  ║ 0        ║ 13           ║ 1             ║ NULL        ║ NULL        ║
╠═══════════╬════════╬══════════╬══════════════╬═══════════════╬═════════════╬═════════════╣
║ 146325086 ║ 32.00  ║ 0        ║ 13           ║ 1             ║ NULL        ║ NULL        ║
╠═══════════╬════════╬══════════╬══════════════╬═══════════════╬═════════════╬═════════════╣
║ 146325086 ║ 67.19  ║ 0        ║ 13           ║ 1             ║ NULL        ║ NULL        ║
╠═══════════╬════════╬══════════╬══════════════╬═══════════════╬═════════════╬═════════════╣
║ 146325086 ║ 70.00  ║ 0        ║ 13           ║ 1             ║ NULL        ║ NULL        ║
╠═══════════╬════════╬══════════╬══════════════╬═══════════════╬═════════════╬═════════════╣
║ 146325086 ║ 204.61 ║ 0        ║ 13           ║ 1             ║ NULL        ║ NULL        ║
╠═══════════╬════════╬══════════╬══════════════╬═══════════════╬═════════════╬═════════════╣
║ 146325086 ║ 210.00 ║ 0        ║ 13           ║ 1             ║ NULL        ║ NULL        ║
╠═══════════╬════════╬══════════╬══════════════╬═══════════════╬═════════════╬═════════════╣
║ 146325086 ║ 3.09   ║ 1        ║ 13           ║ 1             ║ 3.09        ║ 1           ║
╚═══════════╩════════╩══════════╩══════════════╩═══════════════╩═════════════╩═════════════╝
由此,我使用查询来计算我需要的不同字段。在本例中,“Count13to21Runners2to3”列显示为null,而实际上,我需要的是计算该bsp范围内的“event_id”的数量(该部分有效),并且该数量介于2和3之间

因此,考虑到CTE的结果,我有13个事件id,其中2个包含“win\u lose=0”)和bsp介于13和21之间的条件,我需要字段Count13to21Runners2to3对它们进行计数,并且字段Count13to21Runners0to1将它们标记为空。我认为问题要么在于我在case函数中使用的专栏,要么在于我在为我使用的td.[Total Runners]字段做CTE的方式

因此,为了继续,我需要以某种方式对bsp括号中的2个事件id执行条件,使其在字段Count13to21Runners2to3中成为计数器(因为它们是2),并在Count13to21Runners0to1中标记为null,但我不知道如何执行,我想这个问题在我可以在CTE中添加的专栏中

为清晰起见,请编辑:

我需要这条线:

count(CASE WHEN td.BSP >13 AND td.BSP <=21 AND td.WIN_LOSE = 0 AND td.[Total Runners] >=2 AND td.[Total Runners] <=3 THEN td.BSP END) AS Count13to21Runners2to3,

count(当td.BSP>13且td.BSP=2且td.[Total Runners]13且这是我最后得到的代码:

 WITH CTE_TblData as(
SELECT 
td.EVENT_ID, 
       td.MENU_HINT, 
       td.EVENT_NAME,
       td.BSP,
       td.EVENT_DT AS Expr1003, 
       td.WIN_LOSE,
       (SELECT count(*) FROM dbo.tblData td2 WHERE td2.EVENT_ID =td.EVENT_ID) AS [CountRunners],
       SUM(CASE WHEN td.EVENT_ID = td.EVENT_ID THEN 1  END) AS [Total Runners], 
       SUM(CASE WHEN td.WIN_LOSE = 1 THEN td.BSP  END) AS [WinnerPrice],
       SUM(CASE WHEN td.WIN_LOSE = 1 THEN 1 END) AS [WinnerCount],
       td.[Race No] AS RaceNo, 
       replace(LEFT(SUBSTRING(td.EVENT_NAME, CHARINDEX(' ', td.EVENT_NAME) + 1, LEN(td.EVENT_NAME)), CHARINDEX(' ', SUBSTRING(td.EVENT_NAME, CHARINDEX(' ', td.EVENT_NAME) + 2, LEN(td.EVENT_NAME)))),'m','') AS Distance, 
       REVERSE(LEFT(REVERSE(td.EVENT_NAME), CHARINDEX(' ', REVERSE(td.EVENT_NAME)) - 1)) AS Class, 
       FORMAT(CONVERT(DATETIME, td.EVENT_DT, 103), 'dddd') AS [Day],
       DATEPART(WEEKDAY, CONVERT(DATETIME, td.EVENT_DT, 103)) AS [DayNumber]
FROM tblData td
WHERE td.EVENT_ID IN(145814087)
GROUP BY td.EVENT_ID, 
         td.MENU_HINT, 
         td.EVENT_NAME, 
         td.BSP,
         td.EVENT_DT, 
         td.[Race No],
         td.WIN_LOSE
         )



    SELECT td.event_id, td.MENU_HINT, td.EVENT_NAME, FORMAT (td.Expr1003, 'dd/MM/yyyy ') as Expr1003, 
    isnull((SELECT count(td2.BSP - CASE WHEN td2.WIN_LOSE =1 THEN 1 end)  FROM dbo.tblData td2 WHERE td2.EVENT_ID = td.EVENT_ID AND td2.BSP >34 AND td2.BSP <55 HAVING count(td2.BSP) >=4   ),0) AS CountWinnerPrice34to55Runners4to1000,
    (SELECT sum(td2.BSP - CASE WHEN td2.WIN_LOSE =0 THEN td2.BSP ELSE 0 end)  FROM dbo.tblData td2 WHERE td2.EVENT_ID = td.EVENT_ID AND td2.BSP >34 AND td2.BSP <55 HAVING count(td2.BSP) >=4   ) AS SumWinnerPrice34to55Runners4to1000,
    isnull((SELECT count(td2.BSP - CASE WHEN td2.WIN_LOSE =0 THEN 1 end)  FROM dbo.tblData td2 WHERE td2.EVENT_ID = td.EVENT_ID AND td2.BSP >34 AND td2.BSP <55 HAVING count(td2.BSP) >=4   ),0) AS CountWinnerNotPrice34to55Runners4to1000,
    (SELECT sum(td2.BSP - CASE WHEN td2.WIN_LOSE =1 THEN td2.BSP ELSE 0 end)  FROM dbo.tblData td2 WHERE td2.EVENT_ID = td.EVENT_ID AND td2.BSP >34 AND td2.BSP <55 HAVING count(td2.BSP) >=4   ) AS SumWinnerNotPrice34to55Runners4to1000,
    isnull((SELECT count(td2.BSP - CASE WHEN td2.WIN_LOSE =1 THEN 1 end)  FROM dbo.tblData td2 WHERE td2.EVENT_ID = td.EVENT_ID AND td2.BSP >55 AND td2.BSP <89 HAVING count(td2.BSP) IN(0,1)   ),0) AS CountWinnerPrice55to89Runners0to1,
    (SELECT sum(td2.BSP - CASE WHEN td2.WIN_LOSE =0 THEN td2.BSP ELSE 0 end)  FROM dbo.tblData td2 WHERE td2.EVENT_ID = td.EVENT_ID AND td2.BSP >55 AND td2.BSP <89 HAVING count(td2.BSP) IN(0,1)   ) AS SumWinnerPrice55to89Runners0to1,
    isnull((SELECT count(td2.BSP - CASE WHEN td2.WIN_LOSE =0 THEN 1 end)  FROM dbo.tblData td2 WHERE td2.EVENT_ID = td.EVENT_ID AND td2.BSP >55 AND td2.BSP <89 HAVING count(td2.BSP) IN(0,1)   ),0) AS CountWinnerNotPrice55to89Runners0to1,
    (SELECT sum(td2.BSP - CASE WHEN td2.WIN_LOSE =1 THEN td2.BSP ELSE 0 end)  FROM dbo.tblData td2 WHERE td2.EVENT_ID = td.EVENT_ID AND td2.BSP >55 AND td2.BSP <89 HAVING count(td2.BSP) IN(0,1)   ) AS SumWinnerNotPrice55to89Runners0to1,
    isnull((SELECT count(td2.BSP - CASE WHEN td2.WIN_LOSE =1 THEN 1 end)  FROM dbo.tblData td2 WHERE td2.EVENT_ID = td.EVENT_ID AND td2.BSP >55 AND td2.BSP <89 HAVING count(td2.BSP) IN(2,3)   ),0) AS CountWinnerPrice55to89Runners2to3,
    (SELECT sum(td2.BSP - CASE WHEN td2.WIN_LOSE =0 THEN td2.BSP ELSE 0 end)  FROM dbo.tblData td2 WHERE td2.EVENT_ID = td.EVENT_ID AND td2.BSP >55 AND td2.BSP <89 HAVING count(td2.BSP) IN(2,3)   ) AS SumWinnerPrice55to89Runners2to3,
    isnull((SELECT count(td2.BSP - CASE WHEN td2.WIN_LOSE =0 THEN 1 end)  FROM dbo.tblData td2 WHERE td2.EVENT_ID = td.EVENT_ID AND td2.BSP >55 AND td2.BSP <89 HAVING count(td2.BSP) IN(2,3)   ),0) AS CountWinnerNotPrice55to89Runners2to3




FROM CTE_TblData td
WHERE td.class not in ('S', 'M', 'Trot', 'Pace')
GROUP BY td.event_id, td.MENU_HINT, td.EVENT_NAME, td.Expr1003, td.RaceNo, td.Distance, td.Class, td.[Day]
Order by td.Expr1003 desc, td.raceno desc
--RETURN 0 
查询将返回:

+-----------+---------------------------+--------------+------------+--------------------------------------+------------------------------------+-----------------------------------------+
| event_id  | MENU_HINT                 | EVENT_NAME   | Expr1003   | CountWinnerPrice34to55Runners4to1000 | SumWinnerPrice34to55Runners4to1000 | CountWinnerNotPrice34to55Runners4to1000 |
+-----------+---------------------------+--------------+------------+--------------------------------------+------------------------------------+-----------------------------------------+
| 145814087 | AUS / Coff (AUS) 22nd Jul | R7 1415m CL3 | 22/07/2018 | 0                                    | 0.00                               | 4                                       |
+-----------+---------------------------+--------------+------------+--------------------------------------+------------------------------------+-----------------------------------------+

但是,它的性能非常差。

基本上不可能在没有看到您启动数据的情况下知道您在做什么——也不要使用屏幕截图——如果我们想复制数据来编写一些测试和示例代码,我们就不能。@Hogan我如何粘贴而不是屏幕截图,以便易于使用?有什么特殊的网站吗?因为一个表br尝试粘贴时出现EAK。起始数据是CTY。您可以将SSM切换为使用文本输出模式(Ctrl T)。若要返回网格,请使用Ctrld D。注意;只有在重新运行查询时才能看到更改,所以请按Ctrl T然后按F5。谢谢,我这样做了,但是格式并不完美,但我也粘贴了它。@Hogan我修复了表格式,请告诉我您是否需要帮助
+-----------+---------------------------+--------------+-------+------------+----------+--------------+---------------+-------------+-------------+--------+----------+-------+--------+-----------+
| EVENT_ID  | MENU_HINT                 | EVENT_NAME   | BSP   | Expr1003   | WIN_LOSE | CountRunners | Total Runners | WinnerPrice | WinnerCount | RaceNo | Distance | Class | Day    | DayNumber |
+-----------+---------------------------+--------------+-------+------------+----------+--------------+---------------+-------------+-------------+--------+----------+-------+--------+-----------+
| 145814087 | AUS / Coff (AUS) 22nd Jul | R7 1415m CL3 | 4.20  | 2018-07-22 | 1        | 12           | 1             | 4.20        | 1           | 7      | 1415     | CL3   | Sunday | 1         |
+-----------+---------------------------+--------------+-------+------------+----------+--------------+---------------+-------------+-------------+--------+----------+-------+--------+-----------+
| 145814087 | AUS / Coff (AUS) 22nd Jul | R7 1415m CL3 | 4.47  | 2018-07-22 | 0        | 12           | 1             | NULL        | NULL        | 7      | 1415     | CL3   | Sunday | 1         |
+-----------+---------------------------+--------------+-------+------------+----------+--------------+---------------+-------------+-------------+--------+----------+-------+--------+-----------+
| 145814087 | AUS / Coff (AUS) 22nd Jul | R7 1415m CL3 | 7.80  | 2018-07-22 | 0        | 12           | 1             | NULL        | NULL        | 7      | 1415     | CL3   | Sunday | 1         |
+-----------+---------------------------+--------------+-------+------------+----------+--------------+---------------+-------------+-------------+--------+----------+-------+--------+-----------+
| 145814087 | AUS / Coff (AUS) 22nd Jul | R7 1415m CL3 | 8.60  | 2018-07-22 | 0        | 12           | 1             | NULL        | NULL        | 7      | 1415     | CL3   | Sunday | 1         |
+-----------+---------------------------+--------------+-------+------------+----------+--------------+---------------+-------------+-------------+--------+----------+-------+--------+-----------+
| 145814087 | AUS / Coff (AUS) 22nd Jul | R7 1415m CL3 | 10.99 | 2018-07-22 | 0        | 12           | 1             | NULL        | NULL        | 7      | 1415     | CL3   | Sunday | 1         |
+-----------+---------------------------+--------------+-------+------------+----------+--------------+---------------+-------------+-------------+--------+----------+-------+--------+-----------+
| 145814087 | AUS / Coff (AUS) 22nd Jul | R7 1415m CL3 | 15.95 | 2018-07-22 | 0        | 12           | 1             | NULL        | NULL        | 7      | 1415     | CL3   | Sunday | 1         |
+-----------+---------------------------+--------------+-------+------------+----------+--------------+---------------+-------------+-------------+--------+----------+-------+--------+-----------+
| 145814087 | AUS / Coff (AUS) 22nd Jul | R7 1415m CL3 | 18.50 | 2018-07-22 | 0        | 12           | 1             | NULL        | NULL        | 7      | 1415     | CL3   | Sunday | 1         |
+-----------+---------------------------+--------------+-------+------------+----------+--------------+---------------+-------------+-------------+--------+----------+-------+--------+-----------+
| 145814087 | AUS / Coff (AUS) 22nd Jul | R7 1415m CL3 | 30.45 | 2018-07-22 | 0        | 12           | 1             | NULL        | NULL        | 7      | 1415     | CL3   | Sunday | 1         |
+-----------+---------------------------+--------------+-------+------------+----------+--------------+---------------+-------------+-------------+--------+----------+-------+--------+-----------+
| 145814087 | AUS / Coff (AUS) 22nd Jul | R7 1415m CL3 | 34.20 | 2018-07-22 | 0        | 12           | 1             | NULL        | NULL        | 7      | 1415     | CL3   | Sunday | 1         |
+-----------+---------------------------+--------------+-------+------------+----------+--------------+---------------+-------------+-------------+--------+----------+-------+--------+-----------+
| 145814087 | AUS / Coff (AUS) 22nd Jul | R7 1415m CL3 | 36.63 | 2018-07-22 | 0        | 12           | 1             | NULL        | NULL        | 7      | 1415     | CL3   | Sunday | 1         |
+-----------+---------------------------+--------------+-------+------------+----------+--------------+---------------+-------------+-------------+--------+----------+-------+--------+-----------+
| 145814087 | AUS / Coff (AUS) 22nd Jul | R7 1415m CL3 | 40.00 | 2018-07-22 | 0        | 12           | 1             | NULL        | NULL        | 7      | 1415     | CL3   | Sunday | 1         |
+-----------+---------------------------+--------------+-------+------------+----------+--------------+---------------+-------------+-------------+--------+----------+-------+--------+-----------+
| 145814087 | AUS / Coff (AUS) 22nd Jul | R7 1415m CL3 | 45.55 | 2018-07-22 | 0        | 12           | 1             | NULL        | NULL        | 7      | 1415     | CL3   | Sunday | 1         |
+-----------+---------------------------+--------------+-------+------------+----------+--------------+---------------+-------------+-------------+--------+----------+-------+--------+-----------+
+-----------+---------------------------+--------------+------------+--------------------------------------+------------------------------------+-----------------------------------------+
| event_id  | MENU_HINT                 | EVENT_NAME   | Expr1003   | CountWinnerPrice34to55Runners4to1000 | SumWinnerPrice34to55Runners4to1000 | CountWinnerNotPrice34to55Runners4to1000 |
+-----------+---------------------------+--------------+------------+--------------------------------------+------------------------------------+-----------------------------------------+
| 145814087 | AUS / Coff (AUS) 22nd Jul | R7 1415m CL3 | 22/07/2018 | 0                                    | 0.00                               | 4                                       |
+-----------+---------------------------+--------------+------------+--------------------------------------+------------------------------------+-----------------------------------------+