2017-10-10 12 views
0

でJSONとしてクエリ結果の一部だけが、私はJSON列を持つSQLテーブルXを持つ「JsonVal」&他のいくつかの列フォーマットSQL Serverの

Name  Id Group JsonVal 
---------------------------------------------------------- 
Name1  2  gg1  {"LogLevel":"2", "InfoLevel":"3"} 
Name2  3  gg5  {"LogLevel":"4"} 

JsonVal内のデータの意味を解析して行った後コラム私は私はこのような結果を得るように、テーブルXから読みたい、私が望むように、 :

Name  Id Features 
---------------------------------------------------------- 
Name1  2  {"HasLogLevel":"True", "LogLevel":"2", "HasInfoLevel":"True"} 
Name2  3  {"HasLogLevel":"True", "LogLevel":"4", "HasInfoLevel":"False"} 

私はJSONに私の列の一部だけを変換する方法を見つけることができないのです。 私はこのようなクエリでJSONのために行う場合:

SELECT Name,Id, 
HasLogLevel = CASE WHEN JSON_VALUE(JsonVal,'$."LogLevel"') IS NOT NULL THEN 'True' ELSE 'False' END, 
LogLevel = CASE WHEN JSON_VALUE(JsonVal,'$."LogLevel"') IS NULL THEN 'NO-VALUE' ELSE JSON_VALUE(JsonVal,'$."LogLevel"') END, 
HasInfoLevel = CASE WHEN JSON_VALUE(JsonVal,'$."InfoLevel"') IS NOT NULL THEN 'True' ELSE 'False' END 
FROM X FOR JSON PATH 

それはJSONに(名前、IDを含む)すべての列に変換します。しかし、私は3列のHasLogLevel、LogLevel、HasInfoLevelを結果のJSONにフォーマットしたいだけです

私はSQL Serverで1つのクエリで検索して結果を得る方法はありますか?

+0

どのようなシナリオですか?たぶんPythonでAzure SQLデータベースを照会し、そこから新しいJSON文字列を生成することができます。 –

+0

@EstienneGranetこれは制限のためにT-SQLのみを使用できます。これをクエリで達成する方法を知っていますか? – Alfan

答えて

1

FOR JSON PATHがクエリの結果全体に適用されるので、SELECT文でJSONライクなデータとJSON以外のデータを組み合わせることはできません。サブクエリを使用してJSONを具体的に作成し、エイリアスを使用して他の列と照合します。

このメソッドはIdカラムにUNIQUE/PRIMARY KEYという制約を必要とし、WHERE句は1度に1つの結果しか返さないようにします。

SELECT T1.[Name], T1.[Id], 
    (SELECT HasLogLevel = CASE WHEN JSON_VALUE(JsonVal,'$."LogLevel"') IS NOT NULL THEN 'True' ELSE 'False' END, 
    LogLevel = CASE WHEN JSON_VALUE(JsonVal,'$."LogLevel"') IS NULL THEN 'NO-VALUE' ELSE JSON_VALUE(JsonVal,'$."LogLevel"') END, 
    HasInfoLevel = CASE WHEN JSON_VALUE(JsonVal,'$."InfoLevel"') IS NOT NULL THEN 'True' ELSE 'False' END 
    FROM TestTable AS T2 
    WHERE T2.[Id] = T1.[Id] 
    FOR JSON PATH) AS Features 
FROM TestTable AS T1; 
+0

それはうまくいった!ありがとう、エステエンヌ! – Alfan

+0

もしそれが役に立つなら、答えをupvoteしてください! –

関連する問題