2016-06-10 4 views
1

Ich verwende SQL Server 2012, und ich möchte diese Ansicht durch Datenbankabfrage erreichen und es programmgesteuert mit Jquery anzeigen.SQL Server-Abfrage für die Organisation von Daten

Erwarteter Ausgang

enter image description here

Stromausgang

enter image description here

Dies ist meine aktuelle Abfrage:

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

Und ich zeigen die Tabelle mit 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); 
      } 
     }) 

Wie kann ich die erwartete Ausgabe erreichen? Ich bin derzeit mit meiner Implementierung festgefahren.

Antwort

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]; 

Die obige Abfrage wird Ihnen die gewünschte Ausgabe

+0

Akshey, Frequenz ist nicht Teil der Tabelle. Es ist die Anzahl aller Einträge für die Organisation für bestimmte Menge – Awoi

+0

Modifizierte Antwortprüfung bitte –

+0

Übrigens kann die eingestellte Anzahl in Abhängigkeit von den Werten in der Set-Spalte variieren. Gibt es eine Möglichkeit, dies dynamisch zu machen? – Awoi

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

das funktioniert nicht für mich – Awoi

+0

können Sie bitte Details teilen y oder was nicht für Sie gearbeitet hat –