Sql 将Null替换为'-';动态透视查询中的字符串
我有下面的代码,我试图动态地透视表Sql 将Null替换为'-';动态透视查询中的字符串,sql,sql-server,Sql,Sql Server,我有下面的代码,我试图动态地透视表 SELECT DISTINCT lton.order_number AS OrderNo, c.compound_name AS compoundName, lt.batch_number AS batch_number, CASE
SELECT DISTINCT lton.order_number AS OrderNo,
c.compound_name AS compoundName,
lt.batch_number AS batch_number,
CASE WHEN lt.machine_number = 0 THEN m.name
ELSE ltn.test_machine
END AS test_machine,
CASE WHEN lt.pass_customer_specs = 1 THEN 'Pass'
ELSE 'Fail'
END AS passCustomer
INTO #TEMP2
FROM lab_test lt
JOIN lab_test_compound ltc
ON ltc.id = lt.lab_test_compound_id
JOIN compound c
ON c.id = ltc.compound_id
LEFT JOIN lab_test_machine_configuration ltmc
ON ltmc.id = ltc.lab_test_machine_configuration_id
LEFT JOIN lab_test_machine ltn
ON ltn.id = ltmc.lab_test_machine_id
LEFT JOIN lab_test_measurement ltm
ON ltm.lab_test_machine_id = ltn.id
LEFT JOIN measurement m
ON m.id = ltm.measurement_id
LEFT JOIN lab_test_order_number lton
ON lton.lab_test_id = lt.id
WHERE lt.date_created >= '2020-01-30 06:55:42.997'
AND lt.last_test = 1;
SELECT @Columns1 = COALESCE(@Columns1 + ', ','') + QUOTENAME(test_machine)
FROM
( SELECT DISTINCT test_machine
FROM #TEMP2) AS B
ORDER BY B.test_machine
SET @columns3 = ' SELECT compoundName,
OrderNo,
batch_number,
'+ ISNULL(@Columns1,'-') +'
FROM ( SELECT *
FROM #TEMP2) AS PivotData
PIVOT (MIN(passcustomer)
FOR test_machine IN ('+ @Columns1 +')) AS pvt1
ORDER BY compoundName, batch_number'
EXEC(@columns3)
DROP TABLE #TEMP2
一切似乎都按照我想要的方式工作,除了我想用“-”替换空值
有什么想法吗?您需要将合并放入动态列列表中—类似于以下内容:
SELECT @Columns1 = 'COALESCE(' + QUOTENAME(test_machine) + ',''-''),' + @Columns1
FROM
( SELECT DISTINCT test_machine
FROM #TEMP2) AS B
ORDER BY B.test_machine;
SELECT @Columns1 = SUBSTRING(@Columns1,1,LEN(@Columns1)-1);
isnull(@Columns1…您拥有的将用“-”而不是空列内容替换空列名。您的意思可能是
isnull(@Columns1,'-''作为[column]')
。引用是动态SQL的祸根。(总是在执行验证之前先打印结果。)@jeroenmostert,是的,我必须做一些类似的事情!谢谢!请注意,为了让它工作,@Columns1应该以一个空字符串值开始(不是[null])是的,明白了!非常感谢!很高兴它工作了!如果这是解决问题的原因,请您将其标记为答案。谢谢:)