我有以下查询:
DECLARE @AccString varchar(max)
SET @AccString=''
SELECT @Acctring=@AccString + description + ' [ ] '
FROM tl_sb_accessoryInventory ai
JOIN tl_sb_accessory a on a.accessoryID = ai.accessoryID
WHERE userID=6
SELECT userID, serviceTag, model, @AccString AS ACCESSORIES FROM tl_sb_oldLaptop ol
JOIN tl_sb_laptopType lt ON ol.laptopTypeID = lt.laptopTypeID
WHERE userID=6
输出:
我希望能够为表tl_sb_user中的每个userID运行此功能。
获取用户标识的声明是:
Select userID from tl_sb_user
如何让每个用户输出一行?
答案 0 :(得分:3)
您正在尝试执行字符串连接子查询。在SQL Server中,您需要使用带有for xml path
的相关子查询来执行字符串连接。奥术,但它通常有效。
结果是这样的:
SELECT userID, serviceTag, model, @AccString AS ACCESSORIES,
stuff((select ' [ ] ' + description
from tl_sb_accessoryInventory ai join
tl_sb_accessory a
on a.accessoryID = ai.accessoryID
where a.userId = ol.UserId
for xml path ('')
), 1, 11, '') as accessories
FROM tl_sb_oldLaptop ol JOIN
tl_sb_laptopType lt
ON ol.laptopTypeID = lt.laptopTypeID;
您没有表明列来自何处的表别名,因此我只是猜测a.userId = ol.UserId
引用了正确的表。
此外,这会用html表单替换某些字符。值得注意的是,'<'
和'>'
会变成'<'
和'>'
之类的内容。当我遇到此问题时,我使用replace()
替换值。
答案 1 :(得分:0)
简单地省略WHERE
条款。