我有两个这样的表:
InfoTable
-------------------
AVNR Substation ColumnTitle S6_name AVNRString
-------------------------------------------------------------------
1129 AHWAZ-1 T3+T4 MW 1129,1134
1130 AHWAZ-1 T3+T4 MX 1130,1135
1134 AHWAZ-1 T3+T4 MW 1129,1134
1135 AHWAZ-1 T3+T4 MX 1130,1135
8906 SHOMAL T9 MW 8906
8907 SHOMAL T9 MX 8907
和
DataTable
------------------------------------------------
Pdate Ptime AVNR Wert
------------------------------------------------
03-13-2017 01:00 1129 12.65
03-13-2017 02:00 1129 25.65
03-13-2017 03:00 1129 102.05
03-12-2017 01:00 1129 12.65
03-14-2017 01:00 1129 12.65
03-16-2017 05:00 1129 12.65
03-13-2017 01:00 1134 12.65
03-13-2017 02:00 1134 25.65
03-13-2017 03:00 1130 102.05
03-12-2017 01:00 1135 11.15
03-14-2017 01:00 1130 10.00
03-16-2017 01:00 8906 24.5
03-13-2017 01:00 8906 23.5
03-16-2017 02:00 8907 22.5
03-13-2017 01:00 8907 21.5
03-16-2017 05:00 8906 12.5
03-13-2017 02:00 8907 20.5
我想要这样的结果
ResultTable
-------------------
Substation ColumnTitle S6_name Pdate pTime Sum_of_Wert
-------------------------------------------------------------------
AHWAZ-1 T3+T4 MW 03-13-2017 01:00 25.3 (sum of Wert for 1129,1134 for that date and time)
AHWAZ-1 T3+T4 MW 03-13-2017 02:00 51.3 (sum of Wert for 1129,1134 for that date and time)
AHWAZ-1 T3+T4 MW 03-13-2017 03:00 xxx
AHWAZ-1 T3+T4 MX 03-14-2017 01:00 xxx
SHOMAL T9 MW 03-13-2017 01:00 xxx
SHOMAL T9 MW 03-13-2017 02:00 xxx
.
例如,我想要在AvrString
中区分每个日期和时间的Substations
的总和值。
有没有可能我可以用SQL做这件事?我不是,也许是在Linq?我已经在visual studio中编写了程序,但是速度很慢。我想知道对此是否有什么想法。
我是在visual studio中用sql数据库用c#编程的。
发布于 2018-06-01 06:41:37
下面是使用STRING_SPLIT
的查询
SELECT it.Substation,it.ColumnTitle,it.S6_name,dt.Pdate,dt.pTime, SUM(dt.Wert) AS Sum_of_Wert
FROM InfoTable it
CROSS APPLY (SELECT value FROM STRING_SPLIT(it.AVNRString, ',') ) x
CROSS APPLY (SELECT * FROM DataTable WHERE AVNR = CAST(x.value as INT) ) dt
GROUP BY it.Substation,it.ColumnTitle,it.S6_name,dt.Pdate,dt.pTime
SQL Fiffle链接http://sqlfiddle.com/#!18/e1ed2d/1
https://stackoverflow.com/questions/50597050
复制相似问题