簡體   English   中英

將所有列與其中的列名連接起來,每一行一個字符串

[英]concatenate all columns from with names of columns also in it, one string for every row

CREATE TABLE myTable 
(
    COL1 int, 
    COL2 varchar(10), 
    COL3 float
)

INSERT INTO myTable
VALUES (1, 'c2r1', NULL), (2, 'c2r2', 2.335)

我想要一個表的每一行的輸出一個字符串,其中包含所有列和名稱。

就像是:

COL1=1|COL2=c2r1|COL3=NULL
COL1=2|COL2=c2r2|COL3=2.3335

我有一個包含很多列的表,所以它必須是動態的(它也可以在不同的表上使用它),是否有一個簡單的解決方案,我可以這樣做並選擇分隔符之類的東西......(它必須處理也可以使用 NULL 值和數值。)

我正在使用 SQL Server 2019。

由於您在 2019 年,string_agg() 帶有一點 if JSON

例子

 Select NewVal
  From  MyTable A
  Cross Apply ( Select NewVal = string_agg([key]+'='+isnull(value,'null'),'|')
                 From OpenJson((Select A.* For JSON Path,Without_Array_Wrapper,INCLUDE_NULL_VALUES  )) 
             ) B

結果

NewVal
COL1=1|COL2=c2r1|COL3=null
COL1=2|COL2=c2r2|COL3=2.335000000000000e+000   -- Don't like the float

編輯以捕獲浮點數

Select NewVal
  From  MyTable A
  Cross Apply ( Select NewVal = string_agg([key]+'='+isnull(case when value like '%0e+0%' then concat('',convert(decimal(15,3),convert(float,value))) else value end,'null'),'|')
                 From OpenJson((Select A.* For JSON Path,Without_Array_Wrapper,INCLUDE_NULL_VALUES  )) 
             ) B

結果

NewVal
COL1=1|COL2=c2r1|COL3=null
COL1=2|COL2=c2r2|COL3=2.335

有人敢為此濫用 json 嗎?

SELECT REPLACE (REPLACE (REPLACE (REPLACE (REPLACE (ca.js,'":','='), ',"','|'), '"',''), '[{','') ,'}]','') AS data
FROM (SELECT col1 as id FROM myTable) AS list
CROSS APPLY
(
  SELECT t.col1
  , t.col2
  , cast(t.col3 as decimal(16,3)) as col3
  FROM myTable t
  WHERE t.col1 = list.id
  FOR JSON AUTO, INCLUDE_NULL_VALUES
) ca(js)

它將在交叉應用中使用簡單的SELECT t.* 但是浮點數往往有點太長了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM