3

ストアドプロシージャがあります

SELECT P.Name,P.Description,
      PP.Attribute,PD.Value
FROM admin.Profiles P
LEFT JOIN admin.ProfilePreferenceMap PPM on P.ProfileID=PPM.ProfileID
LEFT JOIN admin.ProfilePrefDtl PD on PD.ProfilePrefDtlID=PPM.PreferenceID
LEFT JOIN admin.ProfilePref PP on PP.ProfilePrefID=PD.ProfilePrefID
WHERE P.Name='Profile1'

次のような行を返します

Name          Description           Attribute  Value
Profile1    Profile 1 description     E         EV
Profile1    Profile 1 description     S         SV

私は結果を取得したいと思います

Name            Description         Attribute   Value
Profile1    Profile 1 description   E,S         EV,SV

私の目的は、この値を次のような JSON データに変換することです-

[{"Name":"Profile1","Description":"Profile 1 description","Attribute":["E", "S"],"Value":["EV", "SV"]}]
4

2 に答える 2

2

MySql に存在する GROUP_CONCAT() をエミュレートする必要があります

SQLFiddle デモ

with t as
(
  SELECT P.Name,P.Description,
      PP.Attribute,PD.Value
  FROM admin.Profiles P
  LEFT JOIN admin.ProfilePreferenceMap PPM on P.ProfileID=PPM.ProfileID
  LEFT JOIN admin.ProfilePrefDtl PD on PD.ProfilePrefDtlID=PPM.PreferenceID
  LEFT JOIN admin.ProfilePref PP on PP.ProfilePrefID=PD.ProfilePrefID
  WHERE P.Name='Profile1'
)

select 
    Name,Description, 
    stuff((select ', ' + Attribute 
           from t t2 where t1.NAme = t2.NAme and t1.Description = t2.Description
           for xml path('')),
          1,2,'') [Attributes],
    stuff((select ', ' + Value
           from t t2 where t1.NAme = t2.NAme and t1.Description = t2.Description
           for xml path('')),
          1,2,'') [Values]
from t t1
group by Name,Description
于 2013-03-12T06:21:51.393 に答える
0

一意の名前または説明列でグループ化するために使用できますが、テーブルなどでgroup by何かを行わない限り、別々の行にまたがる値で構成されるコンマ区切りの値を取得する簡単な方法があるかどうかはわかりません。TempCONCAT()

グループ化に問題がない場合は、次のことを試してください。

SELECT P.Name,P.Description,
      PP.Attribute,PD.Value
FROM admin.Profiles P
LEFT JOIN admin.ProfilePreferenceMap PPM on P.ProfileID=PPM.ProfileID
LEFT JOIN admin.ProfilePrefDtl PD on PD.ProfilePrefDtlID=PPM.PreferenceID
LEFT JOIN admin.ProfilePref PP on PP.ProfilePrefID=PD.ProfilePrefID
WHERE P.Name='Profile1'
GROUP BY P.Name

ただし、このようにグループ化すると、(並べ替えに基づいて)最初の行と列のみが表示されAttributeますValue

于 2013-03-12T05:10:20.677 に答える