我有一大堆ID,我需要从数据库中填充一些信息。我希望我的查询结果能够显示数据中的空白。这很难描述,但鉴于这些数据:
这个查询:
SELECT ID, Name, Color FROM myTable
WHERE ID IN ('1','2','3','4','5','6','7')
我想要这些结果:
这可能吗?
答案 0 :(得分:2)
使用功能......
CREATE FUNCTION dbo.BreakStringIntoRows (@CommadelimitedString varchar(1000))
RETURNS @Result TABLE (Ret VARCHAR(100))
AS
BEGIN
DECLARE @IntLocation INT
WHILE (CHARINDEX(',', @CommadelimitedString, 0) > 0)
BEGIN
SET @IntLocation = CHARINDEX(',', @CommadelimitedString, 0)
INSERT INTO @Result (Ret)
--LTRIM and RTRIM to ensure blank spaces are removed
SELECT RTRIM(LTRIM(SUBSTRING(@CommadelimitedString, 0, @IntLocation)))
SET @CommadelimitedString = STUFF(@CommadelimitedString, 1, @IntLocation, '')
END
INSERT INTO @Result (Ret)
SELECT RTRIM(LTRIM(@CommadelimitedString))--LTRIM and RTRIM to ensure blank spaces are removed
RETURN
END
SELECT
Id = B.Ret,
Name = ISNULL(T.Name, ''),
Color = ISNULL(T.Color, '')
FROM dbo.BreakStringIntoRows('1,2,3,4,5,6,7') AS B
LEFT JOIN myTable T ON B.Ret = T.Id
希望它有所帮助。
答案 1 :(得分:1)
您可以使用递归CTE创建值表,然后连接到该表以查找缺失值。
;with CTE AS (
SELECT 1 AS col_
UNION ALL
SELECT 1 + col_
FROM cte
WHERE col_ <100
)
SELECT col_, mt.*
FROM cte
LEFT JOIN myTable mt
ON mt.id = col_