SELECT STUFF( ( SELECT ',' + CONVERT ( VARCHAR, CASE WHEN ISNUMERIC( REPLACE( t2.hsdj, ',', '' ) ) = 1 THEN CAST ( REPLACE( t2.hsdj, ',', '' ) AS FLOAT ) END ) FROM formtable_main_43_dt1 t2 WHERE t1.id = t2.mainid FOR XML PATH ( '' ) ), 1, 1, '' ) AS '采购单价', ( SELECT ',' + CONVERT ( VARCHAR, CASE WHEN ISNUMERIC( REPLACE( t2.hsdj, ',', '' ) ) = 1 THEN CAST ( REPLACE( t2.hsdj, ',', '' ) AS FLOAT ) END ) FROM formtable_main_43_dt1 t2 WHERE t1.id = t2.mainid FOR XML PATH ( '' ) ), 1, 1, '' ) AS '品牌' FROM formtable_main_43 t1
时间: 2023-08-20 09:06:59 浏览: 77
这是一条 SQL 查询语句,它的作用是从表 formtable_main_43 中查询出每个记录的采购单价和品牌信息,并将它们以逗号分隔的形式拼接成字符串。具体实现方式是通过子查询和 XML PATH 函数。其中 CASE WHEN 子句用于判断采购单价是否为数字,如果是,则将其转换为浮点型;如果不是,则返回 NULL。最终结果会包含两列:采购单价和品牌。
相关问题
SELECT t1.id, STUFF( ( SELECT ',' + CONVERT ( VARCHAR, CASE WHEN ISNUMERIC( REPLACE( t2.hsdj, ',', '' ) ) = 1 THEN CAST ( REPLACE( t2.hsdj, ',', '' ) AS FLOAT ) END ) FROM formtable_main_43_dt1 t2 WHERE t1.id = t2.mainid FOR XML PATH ( '' ) ), 1, 1, '' ) AS MergedValues FROM formtable_main_43 t1 INNER JOIN formtable_main_43_dt1 t2 ON t1.id = t2.mainid GROUP BY t1.id需要展示更多T1中字段,该怎么该
如果您需要在结果中展示更多的 t1 中的字段,您可以在 SELECT 语句中添加这些字段,同时在 GROUP BY 语句中也需要包含这些字段。例如,如果您想要展示 t1 中的字段 t1.field1 和 t1.field2,您可以将 SELECT 语句修改为:
```
SELECT t1.id, t1.field1, t1.field2,
STUFF(
(
SELECT ',' + CONVERT (VARCHAR,
CASE
WHEN ISNUMERIC(REPLACE(t2.hsdj, ',', '')) = 1 THEN
CAST(REPLACE(t2.hsdj, ',', '') AS FLOAT)
END
)
FROM formtable_main_43_dt1 t2
WHERE t1.id = t2.mainid
FOR XML PATH('')
), 1, 1, ''
) AS MergedValues
FROM formtable_main_43 t1
INNER JOIN formtable_main_43_dt1 t2 ON t1.id = t2.mainid
GROUP BY t1.id, t1.field1, t1.field2
```
请注意,根据您的需求,您可能还需要添加其他的 t1 字段。
SELECT t1.id, STUFF( ( SELECT ',' + CONVERT ( VARCHAR, CASE WHEN ISNUMERIC( REPLACE( t2.hsdj, ',', '' ) ) = 1 THEN CAST ( REPLACE( t2.hsdj, ',', '' ) AS FLOAT ) END ) FROM formtable_main_43_dt1 t2 WHERE t1.id = t2.mainid FOR XML PATH ( '' ) ), 1, 1, '' ) AS MergedValues FROM formtable_main_43 t1 INNER JOIN formtable_main_43_dt1 t2 ON t1.id = t2.mainid GROUP BY t1.id;怎么再合并查询t1中其他 text、ntext 和 image 数据类型的列
如果查询中还需要合并 t1 表中的其他文本、ntext 和 image 数据类型的列,可以使用类似于上面的方法,将这些列转换为字符串并使用 STUFF 和 FOR XML PATH 函数将它们合并到一起。例如,假设要合并 t1 表中的一个名为 'remarks' 的 text 列,可以像这样修改查询:
```
SELECT t1.id,
STUFF(
(
SELECT
',' + CONVERT (
VARCHAR,
CASE
WHEN ISNUMERIC( REPLACE( t2.hsdj, ',', '' ) ) = 1 THEN CAST ( REPLACE( t2.hsdj, ',', '' ) AS FLOAT )
ELSE NULL -- 如果 t2.hsdj 不是数字,则返回 NULL
END
)
FROM formtable_main_43_dt1 t2
WHERE t1.id = t2.mainid
FOR XML PATH ( '' )
), 1, 1, ''
) AS MergedValues,
COALESCE( t1.remarks, '' ) AS Remarks
FROM formtable_main_43 t1 INNER JOIN formtable_main_43_dt1 t2 ON t1.id = t2.mainid
GROUP BY t1.id;
```
这个查询使用 COALESCE 函数将 t1.remarks 列转换为字符串,并将它作为一个新的列 'Remarks' 添加到查询结果中。请注意,如果 t1.remarks 列包含 NULL 值,则 COALESCE 函数将返回一个空字符串。
阅读全文