TSQL-数据透视不返回所有行

时间:2019-08-23 03:18:56

标签: sql-server tsql pivot

我有以下JSON数组数据集,需要将其解析为2个表行:

ana@gmail.com
['a', 'n', 'a', '@', 'g', 'm', 'a', 'i', 'l', '.', 'c', 'o', 'm']

我需要下面的代码来返回两组员工信息,但它只返回一个。我该如何实现?

[        
  {           "eid": "ABCDGD",          
              "name": "Carol E",          
              "email": "carole@gmail.com",                        
              "role": "Recruiter"        
  },      
  {           "eid": "HDHDK",          
              "name": "Mark H",          
              "email": "markh@gmail.com",                       
              "role": "Manager"    
   }      
 ]

SQLfiddle-http://sqlfiddle.com/#!18/9eecb/54970

2 个答案:

答案 0 :(得分:1)

无需旋转,只需指定您的json列即可提供所需的结果。

SELECT *  
FROM OPENJSON(@c) WITH (   
              eid   varchar(200)   '$.eid',  
              name  varchar(200)   '$.name',  
              email varchar(200)   '$.email',  
              role  varchar(200)   '$.role'
 ) j1

答案 1 :(得分:0)

JSON已经在其中维护表类型的结构,可以使用OPENJSON直接将其转换为表。

作为MSDN网站上OPENJSON的语法。

OPENJSON( jsonExpression [ , path ] )  [ <with_clause> ]

<with_clause> ::= WITH ( { colName type [ column_path ] [ AS JSON ] } [ ,...n ] )

这里只需传递您在JSON中维护的列名,即可将您的JSON转换为SQL Table
您可能会在link上找到更多详细信息。

对于上述查询,您可以尝试此操作。

DECLARE @json NVARCHAR(MAX)
SET @json =  
N'[        
  {           "eid": "ABCDGD",          
              "name": "Carol E",          
              "email": "carole@gmail.com",                        
              "role": "Recruiter"        
  },      
  {           "eid": "HDHDK",          
              "name": "Mark H",          
              "email": "markh@gmail.com",                       
              "role": "Manager"    
   }      
 ]'  

SELECT *  
FROM OPENJSON(@json)  
  WITH ( 
        eid nvarchar(50) '$.eid', 
        name nvarchar(50) '$.name', 
        email nvarchar(50) '$.email', 
        role nvarchar(50) '$.role', 
       )