合并 SQL 查询的结果
merging the results of a SQL query
我正在尝试将此查询的所有数据合并到一个列表中。 'Union' 没有帮助...
有什么想法吗?
DECLARE @cnt INT = 0
DECLARE @SQLQuery AS NVARCHAR(500)
DECLARE @items AS VARCHAR(500)
DECLARE @stline AS VARCHAR(500)
while @cnt < 101
begin
set @items = 'LG_0' + convert(nvarchar(3),@cnt) + '_ITEMS'
set @stline = 'LG_0' + convert(nvarchar(3),@cnt) + '_01_STLINE'
if (OBJECT_ID (@items) is not null and OBJECT_ID(@stline) is not null )
set @SQLQuery = 'SELECT
ITM1.CODE, itm1.NAME, max (stl.date_) [latest date] , price as [latest price], '+ convert(nvarchar(3),@cnt) + ' as [proje kodu]
FROM ' + @items + ' ITM1 INNER JOIN ' + @stline + ' STL
ON ITM1.LOGICALREF = STL.STOCKREF
WHERE PRICE > 0
AND TRCODE = 1
AND CANCELLED = 0
AND INVOICEREF > 0
group by code, name, stl.DATE_ , price
'
exec (@SQLQuery)
set @cnt = @cnt +1
end
结果是这样的:
但我希望它们全部合并...(很抱歉主要是代码问题,我必须在此处添加更多内容)
我不知道为什么 UNION
对你不起作用,但以下应该有效:
DECLARE @cnt INT = 0
DECLARE @SQLQuery AS NVARCHAR(MAX) = ''
DECLARE @items AS VARCHAR(500)
DECLARE @stline AS VARCHAR(500)
while @cnt < 101
begin
set @items = 'LG_0' + convert(nvarchar(3),@cnt) + '_ITEMS'
set @stline = 'LG_0' + convert(nvarchar(3),@cnt) + '_01_STLINE'
if (OBJECT_ID (@items) is not null and OBJECT_ID(@stline) is not null )
set @SQLQuery = @SQLQuery + 'SELECT
ITM1.CODE, itm1.NAME, max (stl.date_) [latest date] , price as [latest price], '+ convert(nvarchar(3),@cnt) + ' as [proje kodu]
FROM ' + @items + ' ITM1 INNER JOIN ' + @stline + ' STL
ON ITM1.LOGICALREF = STL.STOCKREF
WHERE PRICE > 0
AND TRCODE = 1
AND CANCELLED = 0
AND INVOICEREF > 0
GROUP BY code, name, stl.DATE_ , price
UNION ALL
'
set @cnt = @cnt +1
end
-- SUBSTRING to remove last UNION ALL
SELECT @SQLQuery = SUBSTRING(@SQLQuery, 1, LEN(@SQLQuery) - 18)
-- For debugging purposes
-- PRINT @SQLQuery
exec (@SQLQuery)
我无法测试它,但您可以注释 exec
,并取消注释 PRINT
以查看正在生成的查询。它使调试动态 SQL 变得容易得多。
此代码背后的想法:首先根据您的条件构建 UNION ALL
查询。最后去掉最后的UNION ALL
,代码就可以执行了。
DECLARE @cnt INT = 0
DECLARE @SQLQuery AS NVARCHAR(max)
DECLARE @items AS VARCHAR(500)
DECLARE @stline AS VARCHAR(500)
set @SQLQuery =''
while @cnt < 101
begin
set @items = 'LG_0' + convert(nvarchar(3),@cnt) + '_ITEMS'
set @stline = 'LG_0' + convert(nvarchar(3),@cnt) + '_01_STLINE'
if (OBJECT_ID (@items) is not null and OBJECT_ID(@stline) is not null )
set @SQLQuery = @SQLQuery + 'SELECT
ITM1.CODE, itm1.NAME, max (stl.date_) [latest date] , price as [latest price], '+ convert(nvarchar(3),@cnt) + ' as [proje kodu]
FROM ' + @items + ' ITM1 INNER JOIN ' + @stline + ' STL
ON ITM1.LOGICALREF = STL.STOCKREF
WHERE PRICE > 0
AND TRCODE = 1
AND CANCELLED = 0
AND INVOICEREF > 0
GROUP BY code, name, stl.DATE_ , price
UNION ALL
'
set @cnt = @cnt +1
end
-- SUBSTRING to remove last UNION ALL
--PRINT len(@SQLQuery)
set @SQLQuery = left ( @SQLQuery , len(@SQLQuery)-18)
--PRINT len(@SQLQuery)
-- print @SQLQuery
-- For debugging purposes
-- PRINT @SQLQuery
exec (@SQLQuery)
我正在尝试将此查询的所有数据合并到一个列表中。 'Union' 没有帮助...
有什么想法吗?
DECLARE @cnt INT = 0
DECLARE @SQLQuery AS NVARCHAR(500)
DECLARE @items AS VARCHAR(500)
DECLARE @stline AS VARCHAR(500)
while @cnt < 101
begin
set @items = 'LG_0' + convert(nvarchar(3),@cnt) + '_ITEMS'
set @stline = 'LG_0' + convert(nvarchar(3),@cnt) + '_01_STLINE'
if (OBJECT_ID (@items) is not null and OBJECT_ID(@stline) is not null )
set @SQLQuery = 'SELECT
ITM1.CODE, itm1.NAME, max (stl.date_) [latest date] , price as [latest price], '+ convert(nvarchar(3),@cnt) + ' as [proje kodu]
FROM ' + @items + ' ITM1 INNER JOIN ' + @stline + ' STL
ON ITM1.LOGICALREF = STL.STOCKREF
WHERE PRICE > 0
AND TRCODE = 1
AND CANCELLED = 0
AND INVOICEREF > 0
group by code, name, stl.DATE_ , price
'
exec (@SQLQuery)
set @cnt = @cnt +1
end
结果是这样的:
但我希望它们全部合并...(很抱歉主要是代码问题,我必须在此处添加更多内容)
我不知道为什么 UNION
对你不起作用,但以下应该有效:
DECLARE @cnt INT = 0
DECLARE @SQLQuery AS NVARCHAR(MAX) = ''
DECLARE @items AS VARCHAR(500)
DECLARE @stline AS VARCHAR(500)
while @cnt < 101
begin
set @items = 'LG_0' + convert(nvarchar(3),@cnt) + '_ITEMS'
set @stline = 'LG_0' + convert(nvarchar(3),@cnt) + '_01_STLINE'
if (OBJECT_ID (@items) is not null and OBJECT_ID(@stline) is not null )
set @SQLQuery = @SQLQuery + 'SELECT
ITM1.CODE, itm1.NAME, max (stl.date_) [latest date] , price as [latest price], '+ convert(nvarchar(3),@cnt) + ' as [proje kodu]
FROM ' + @items + ' ITM1 INNER JOIN ' + @stline + ' STL
ON ITM1.LOGICALREF = STL.STOCKREF
WHERE PRICE > 0
AND TRCODE = 1
AND CANCELLED = 0
AND INVOICEREF > 0
GROUP BY code, name, stl.DATE_ , price
UNION ALL
'
set @cnt = @cnt +1
end
-- SUBSTRING to remove last UNION ALL
SELECT @SQLQuery = SUBSTRING(@SQLQuery, 1, LEN(@SQLQuery) - 18)
-- For debugging purposes
-- PRINT @SQLQuery
exec (@SQLQuery)
我无法测试它,但您可以注释 exec
,并取消注释 PRINT
以查看正在生成的查询。它使调试动态 SQL 变得容易得多。
此代码背后的想法:首先根据您的条件构建 UNION ALL
查询。最后去掉最后的UNION ALL
,代码就可以执行了。
DECLARE @cnt INT = 0
DECLARE @SQLQuery AS NVARCHAR(max)
DECLARE @items AS VARCHAR(500)
DECLARE @stline AS VARCHAR(500)
set @SQLQuery =''
while @cnt < 101
begin
set @items = 'LG_0' + convert(nvarchar(3),@cnt) + '_ITEMS'
set @stline = 'LG_0' + convert(nvarchar(3),@cnt) + '_01_STLINE'
if (OBJECT_ID (@items) is not null and OBJECT_ID(@stline) is not null )
set @SQLQuery = @SQLQuery + 'SELECT
ITM1.CODE, itm1.NAME, max (stl.date_) [latest date] , price as [latest price], '+ convert(nvarchar(3),@cnt) + ' as [proje kodu]
FROM ' + @items + ' ITM1 INNER JOIN ' + @stline + ' STL
ON ITM1.LOGICALREF = STL.STOCKREF
WHERE PRICE > 0
AND TRCODE = 1
AND CANCELLED = 0
AND INVOICEREF > 0
GROUP BY code, name, stl.DATE_ , price
UNION ALL
'
set @cnt = @cnt +1
end
-- SUBSTRING to remove last UNION ALL
--PRINT len(@SQLQuery)
set @SQLQuery = left ( @SQLQuery , len(@SQLQuery)-18)
--PRINT len(@SQLQuery)
-- print @SQLQuery
-- For debugging purposes
-- PRINT @SQLQuery
exec (@SQLQuery)