大数据集将值连接到查询

时间:2017-09-11 12:22:04

标签: sql sql-server tsql asp-classic

我有一个数百万行的视图,在为所有行运行它时会超时,但可以在其中选择以撤回数据的快照。

查看A(超过5000000行 - 运行所有内容时超时) enter image description here

我正在尝试将Criteria名称和KeyDescription2连接起来,基于第0列和idno作为不同的标准,然后导出到csv或电子表格。

结果尝试实现 enter image description here

我创建了一个.asp页面,我从原始表中选择不同的Column 0和idnumber然后循环以获取条件名称。这工作正常但是需要2分钟才能完成1000行,这意味着需要半年才能运行完整的报告!因此需要一种更好,更快的方法来实现这一目标。有谁知道我将如何直接在SQL-Server本身中实现结果。

1 个答案:

答案 0 :(得分:2)

使用stuff() with select ... for xml path ('') method of string concatenation

select 
    Column0
  , idno
  , grouppid
  , Criterianame = stuff((
      select ', '+ i.CriteriaName +': ' + i.KeyDescription2
      from view_a as i
      where i.Column0 = a.Column0
        and i.grouppid = a.grouppid
        and i.idno = '' -- `i.idno is null` if your blank value is a null
      for xml path (''), type).value('(./text())[1]','nvarchar(max)')
    ,1,2,'')
  , criteriatype2
  , keydescription2
from view_a as a
where a.idno <> '' -- `a.idno is not null` if your blank value is a null

注意:

  • 这不会像您在所需结果中指示的那样重新格式化日期值。
  • 即使这比循环更快,但仍然不会超级快
  • 您可能希望调查视图,看看使用基表是否可能带来更好的性能。
  • 在SQL Server 2017中,您可以使用string_agg()