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。
uj5u.com熱心網友回復:
由于您在 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 ' 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
uj5u.com熱心網友回復:
有人敢為此濫用 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.*的交叉應用一起作業。但是浮點數往往有點太長了。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/362299.html
標籤:sql sql-server 查询语句 sql-server-2019
上一篇:T-SQL查詢獲取子元素的最大值
