2016-06-10 54 views
1

我正在使用SQL Server 2012,我想通过数据库查询来实现此视图并使用jquery以编程方式显示它。用于组织数据的SQL Server查询

预期输出

enter image description here

电流输出

enter image description here

这是我当前的查询:

SELECT [OrganizationName],COUNT([Id]) AS Frequency,[Set] FROM *{table}* GROUP BY [Set],[OrganizationName]; 

我展示使用Ajax表:

$.ajax({ 
      url: '@Url.Action("GetOrganizations", "Companies")', 
      type: 'POST', 
      contentType: 'application/json', 
      data: null, 
      dataType: 'json', 
      success: function (result) { 
       console.log("result length: " + result.length); 
       $("#orgTableDiv").css("max-height", result.length * 15); 
       if (result.length > 0 && result[0].OrganizationName!=null) 
       { 
        var selectOptions = "<option value='All'>All</option>"; // dropdown containing all organizations 
        $("#orgTable").empty(); 
        var div = ""; 

        div = "<tr>" + 
          "<th>No</th>" + 
          "<th>Organization Name</th>"; 

        for (var i=0; i<data.length ; i++) { 
         div += "<th>"+data[i]["name"]+"</th>"; 
        } 

        div += "</tr>"; 
        $("#orgTable").append(div); 

        var numOfSets = data.length; 
        var organizationName = ""; 
        var counter = 1; 

        for (var i = 0; i < result.length; i++) { 

         var row = "<tr>" + 
             "<td>" + counter + "</td>" + 
             "<td>" + result[i].OrganizationName + "</td>"; 
         if (result[i].SetValue!=null) 
          for (var j=0; j < result[i].SetValue.length; j++) { 
           var setData = result[i].SetValue[j].split(':'); 

           for (var m=0; m<setData.length; m++) { 
            var temp = setData; 
           } 

           var setNum = setData[0]; 
           var setFrequency = setData[1]; 

           for (var c=1; c<=numOfSets; c++) { 
            if (c==setNum) 
             row += "<td>" + setFrequency + "</td>"; 

           } 
          } 
         counter++; 
         row += "</tr>"; 

         $("#orgTable").append(row); 
         selectOptions +="<option value='" + result[i].OrganizationName+ "'>" + result[i].OrganizationName+ "</option>"; 
        } 

        $('#organizationOption').empty().append(selectOptions); 
       } 

      }, 
      error: function (result) { 
       alert('Error: ' + result); 
      } 
     }) 

我怎样才能达到预期的输出?我目前坚持我的实施。

回答

2
SELECT [OrganizationName], 
Sum(case when set = 1 then 1 else 0 end) as set1, 
Sum(case when set = 2 then 1 else 0 end) as set2, 
Sum(case when set = 3 then 1 else 0 end) as set3, 
Sum(case when set = 4 then 1 else 0 end) as set4, 

FROM *{table}* GROUP BY [OrganizationName]; 

上述查询会给你所需的输出

+0

Akshey,频率不是表的一部分。它是特定组织的所有条目的计数 – Awoi

+0

修改后的答案检查请 –

+0

顺便说一下,根据Set列中的值,设置的编号可能会有所不同。有没有办法让这种动态? – Awoi

1
select * 
    from 
    (
     select OrganizationName, set, Frequency 
     from Tablename 
    ) src 
    pivot 
    (
     sum(Frequency) 
     for set in ([1], [2], [3],[4]) 
    ) piv; 
+0

这对我不起作用 – Awoi

+0

可以请你分享一下详情吗?或者什么不适合你 –