2017-07-27 140 views
1

我有我運行的以下代碼(請參閱下圖中的輸出)。我試圖做的是將所有5個mysql_cteX表(其中X = 1,2,3,4,5)合併到一個完整的查詢表中。將5個查詢合併爲1

-------------------------------------- 
-- MERGING ALL QUERIES INTO 1 TABLE -- 
-------------------------------------- 
--Creating temp tables for common maturity TickerID data 
declare @product nvarchar(max) = 'CCoal' 
declare @product2 nvarchar(max) 

set @mysql1 = ' 
if object_id(''tempdb..#mysql_cte1'') is not null drop table #mysql_cte1 
create table #mysql_cte1(DateTime datetime,'+quotename(Concat(@product, ' ', 'TickerID'))+' int,'+quotename(Concat(@product2, ' ', 'TickerID'))+' int,'+quotename(Concat(@product, ' ', 'Bid'))+' float,'+quotename(Concat(@product, ' ', 'Ask'))+' float,'+quotename(Concat(@product2, ' ', 'Bid'))+' float,'+quotename(Concat(@product2, ' ', 'Ask'))+' float, '+quotename(Concat(@product, ' ', 'Bid - ', @product2, ' ','Ask'))+' float,'+quotename(Concat(@product, ' ', 'Ask - ', @product2, ' ','Bid'))+' float) 
select a.mtime as DateTime, 
    a.tickerid as '+quotename(Concat(@product, ' ', 'TickerID'))+', 
    b.tickerid as '+quotename(Concat(@product2, ' ', 'TickerID'))+', 
    a.bid as '+quotename(Concat(@product, ' ', 'Bid'))+', 
    a.ask as '+quotename(Concat(@product, ' ', 'Ask'))+', 
    b.bid as '+quotename(Concat(@product2, ' ', 'Bid'))+', 
    b.ask as '+quotename(Concat(@product2, ' ', 'Ask'))+', 
    ISNULL(a.bid, 0) - ISNULL(b.ask, 0) as '+quotename(Concat(@product, ' ', 'Bid - ', @product2, ' ','Ask'))+', 
    ISNULL(a.ask, 0) - ISNULL(b.bid, 0) as '+quotename(Concat(@product, ' ', 'Ask - ', @product2, ' ','Bid'))+' 
from #Product_cte1 a left outer join #Product2_cte1 b 
on a.mtime = b.mtime 
Order by DateTime DESC 

' 
set @mysql2 = ' 
if object_id(''tempdb..#mysql_cte2'') is not null drop table #mysql_cte2 
create table #mysql_cte2(DateTime datetime,'+quotename(Concat(@product, ' ', 'TickerID'))+' int,'+quotename(Concat(@product2, ' ', 'TickerID'))+' int,'+quotename(Concat(@product, ' ', 'Bid'))+' float,'+quotename(Concat(@product, ' ', 'Ask'))+' float,'+quotename(Concat(@product2, ' ', 'Bid'))+' float,'+quotename(Concat(@product2, ' ', 'Ask'))+' float, '+quotename(Concat(@product, ' ', 'Bid - ', @product2, ' ','Ask'))+' float,'+quotename(Concat(@product, ' ', 'Ask - ', @product2, ' ','Bid'))+' float) 
select a.mtime as DateTime, 
    a.tickerid as '+quotename(Concat(@product, ' ', 'TickerID'))+', 
    b.tickerid as '+quotename(Concat(@product2, ' ', 'TickerID'))+', 
    a.bid as '+quotename(Concat(@product, ' ', 'Bid'))+', 
    a.ask as '+quotename(Concat(@product, ' ', 'Ask'))+', 
    b.bid as '+quotename(Concat(@product2, ' ', 'Bid'))+', 
    b.ask as '+quotename(Concat(@product2, ' ', 'Ask'))+', 
    ISNULL(a.bid, 0) - ISNULL(b.ask, 0) as '+quotename(Concat(@product, ' ', 'Bid - ', @product2, ' ','Ask'))+', 
    ISNULL(a.ask, 0) - ISNULL(b.bid, 0) as '+quotename(Concat(@product, ' ', 'Ask - ', @product2, ' ','Bid'))+' 
from #Product_cte2 a left outer join #Product2_cte2 b 
on a.mtime = b.mtime 
Order by DateTime DESC 

' 
set @mysql3 = ' 
if object_id(''tempdb..#mysql_cte3'') is not null drop table #mysql_cte3 
create table #mysql_cte3(DateTime datetime,'+quotename(Concat(@product, ' ', 'TickerID'))+' int,'+quotename(Concat(@product2, ' ', 'TickerID'))+' int,'+quotename(Concat(@product, ' ', 'Bid'))+' float,'+quotename(Concat(@product, ' ', 'Ask'))+' float,'+quotename(Concat(@product2, ' ', 'Bid'))+' float,'+quotename(Concat(@product2, ' ', 'Ask'))+' float, '+quotename(Concat(@product, ' ', 'Bid - ', @product2, ' ','Ask'))+' float,'+quotename(Concat(@product, ' ', 'Ask - ', @product2, ' ','Bid'))+' float) 
select a.mtime as DateTime, 
    a.tickerid as '+quotename(Concat(@product, ' ', 'TickerID'))+', 
    b.tickerid as '+quotename(Concat(@product2, ' ', 'TickerID'))+', 
    a.bid as '+quotename(Concat(@product, ' ', 'Bid'))+', 
    a.ask as '+quotename(Concat(@product, ' ', 'Ask'))+', 
    b.bid as '+quotename(Concat(@product2, ' ', 'Bid'))+', 
    b.ask as '+quotename(Concat(@product2, ' ', 'Ask'))+', 
    ISNULL(a.bid, 0) - ISNULL(b.ask, 0) as '+quotename(Concat(@product, ' ', 'Bid - ', @product2, ' ','Ask'))+', 
    ISNULL(a.ask, 0) - ISNULL(b.bid, 0) as '+quotename(Concat(@product, ' ', 'Ask - ', @product2, ' ','Bid'))+' 
from #Product_cte3 a left outer join #Product2_cte3 b 
on a.mtime = b.mtime 
Order by DateTime DESC 

' 
set @mysql4 = ' 
if object_id(''tempdb..#mysql_cte4'') is not null drop table #mysql_cte4 
create table #mysql_cte4(DateTime datetime,'+quotename(Concat(@product, ' ', 'TickerID'))+' int,'+quotename(Concat(@product2, ' ', 'TickerID'))+' int,'+quotename(Concat(@product, ' ', 'Bid'))+' float,'+quotename(Concat(@product, ' ', 'Ask'))+' float,'+quotename(Concat(@product2, ' ', 'Bid'))+' float,'+quotename(Concat(@product2, ' ', 'Ask'))+' float, '+quotename(Concat(@product, ' ', 'Bid - ', @product2, ' ','Ask'))+' float,'+quotename(Concat(@product, ' ', 'Ask - ', @product2, ' ','Bid'))+' float) 
select a.mtime as DateTime, 
    a.tickerid as '+quotename(Concat(@product, ' ', 'TickerID'))+', 
    b.tickerid as '+quotename(Concat(@product2, ' ', 'TickerID'))+', 
    a.bid as '+quotename(Concat(@product, ' ', 'Bid'))+', 
    a.ask as '+quotename(Concat(@product, ' ', 'Ask'))+', 
    b.bid as '+quotename(Concat(@product2, ' ', 'Bid'))+', 
    b.ask as '+quotename(Concat(@product2, ' ', 'Ask'))+', 
    ISNULL(a.bid, 0) - ISNULL(b.ask, 0) as '+quotename(Concat(@product, ' ', 'Bid - ', @product2, ' ','Ask'))+', 
    ISNULL(a.ask, 0) - ISNULL(b.bid, 0) as '+quotename(Concat(@product, ' ', 'Ask - ', @product2, ' ','Bid'))+' 
from #Product_cte4 a left outer join #Product2_cte4 b 
on a.mtime = b.mtime 
Order by DateTime DESC 

' 
set @mysql5 = ' 
if object_id(''tempdb..#mysql_cte5'') is not null drop table #mysql_cte5 
create table #mysql_cte5(DateTime datetime,'+quotename(Concat(@product, ' ', 'TickerID'))+' int,'+quotename(Concat(@product2, ' ', 'TickerID'))+' int,'+quotename(Concat(@product, ' ', 'Bid'))+' float,'+quotename(Concat(@product, ' ', 'Ask'))+' float,'+quotename(Concat(@product2, ' ', 'Bid'))+' float,'+quotename(Concat(@product2, ' ', 'Ask'))+' float, '+quotename(Concat(@product, ' ', 'Bid - ', @product2, ' ','Ask'))+' float,'+quotename(Concat(@product, ' ', 'Ask - ', @product2, ' ','Bid'))+' float) 
select a.mtime as DateTime, 
    a.tickerid as '+quotename(Concat(@product, ' ', 'TickerID'))+', 
    b.tickerid as '+quotename(Concat(@product2, ' ', 'TickerID'))+', 
    a.bid as '+quotename(Concat(@product, ' ', 'Bid'))+', 
    a.ask as '+quotename(Concat(@product, ' ', 'Ask'))+', 
    b.bid as '+quotename(Concat(@product2, ' ', 'Bid'))+', 
    b.ask as '+quotename(Concat(@product2, ' ', 'Ask'))+', 
    ISNULL(a.bid, 0) - ISNULL(b.ask, 0) as '+quotename(Concat(@product, ' ', 'Bid - ', @product2, ' ','Ask'))+', 
    ISNULL(a.ask, 0) - ISNULL(b.bid, 0) as '+quotename(Concat(@product, ' ', 'Ask - ', @product2, ' ','Bid'))+' 
from #Product_cte5 a left outer join #Product2_cte5 b 
on a.mtime = b.mtime 
Order by DateTime DESC 

' 

exec(@mysql1) 
exec(@mysql2) 
exec(@mysql3) 
exec(@mysql4) 
exec(@mysql5) 
; 

--Join the 5 merged queries together in parallel for comparison 
set @Mysql = ' 
Select DateTime,'+quotename(Concat(@product, ' ', 'TickerID'))+','+quotename(Concat(@product2, ' ', 'TickerID'))+','+quotename(Concat(@product, ' ', 'Bid'))+','+quotename(Concat(@product, ' ', 'Ask'))+','+quotename(Concat(@product2, ' ', 'Bid'))+','+quotename(Concat(@product2, ' ', 'Ask'))+','+quotename(Concat(@product, ' ', 'Bid - ', @product2, ' ','Ask'))+','+quotename(Concat(@product, ' ', 'Ask - ', @product2, ' ','Bid'))+' from #mysql_cte1 
UNION ALL 
Select DateTime,'+quotename(Concat(@product, ' ', 'TickerID'))+','+quotename(Concat(@product2, ' ', 'TickerID'))+','+quotename(Concat(@product, ' ', 'Bid'))+','+quotename(Concat(@product, ' ', 'Ask'))+','+quotename(Concat(@product2, ' ', 'Bid'))+','+quotename(Concat(@product2, ' ', 'Ask'))+','+quotename(Concat(@product, ' ', 'Bid - ', @product2, ' ','Ask'))+','+quotename(Concat(@product, ' ', 'Ask - ', @product2, ' ','Bid'))+' from #mysql_cte2 
UNION ALL 
Select DateTime,'+quotename(Concat(@product, ' ', 'TickerID'))+','+quotename(Concat(@product2, ' ', 'TickerID'))+','+quotename(Concat(@product, ' ', 'Bid'))+','+quotename(Concat(@product, ' ', 'Ask'))+','+quotename(Concat(@product2, ' ', 'Bid'))+','+quotename(Concat(@product2, ' ', 'Ask'))+','+quotename(Concat(@product, ' ', 'Bid - ', @product2, ' ','Ask'))+','+quotename(Concat(@product, ' ', 'Ask - ', @product2, ' ','Bid'))+' from #mysql_cte3 
UNION ALL 
Select DateTime,'+quotename(Concat(@product, ' ', 'TickerID'))+','+quotename(Concat(@product2, ' ', 'TickerID'))+','+quotename(Concat(@product, ' ', 'Bid'))+','+quotename(Concat(@product, ' ', 'Ask'))+','+quotename(Concat(@product2, ' ', 'Bid'))+','+quotename(Concat(@product2, ' ', 'Ask'))+','+quotename(Concat(@product, ' ', 'Bid - ', @product2, ' ','Ask'))+','+quotename(Concat(@product, ' ', 'Ask - ', @product2, ' ','Bid'))+' from #mysql_cte4 
UNION ALL 
Select DateTime,'+quotename(Concat(@product, ' ', 'TickerID'))+','+quotename(Concat(@product2, ' ', 'TickerID'))+','+quotename(Concat(@product, ' ', 'Bid'))+','+quotename(Concat(@product, ' ', 'Ask'))+','+quotename(Concat(@product2, ' ', 'Bid'))+','+quotename(Concat(@product2, ' ', 'Ask'))+','+quotename(Concat(@product, ' ', 'Bid - ', @product2, ' ','Ask'))+','+quotename(Concat(@product, ' ', 'Ask - ', @product2, ' ','Bid'))+' from #mysql_cte5 
Order by DateTime DESC 
' 

exec (@Mysql) 

但是,輸出我得到的是這些,而不是1個整體合併表: 5 mysql_cteX tables

請幫助,我也不太清楚我做錯了什麼。我得到的錯誤消息是: 消息208,級別16,狀態0,行25 無效的對象名'#mysql_cte1'。

+0

您正在創建臨時表,但未插入到它們中。只要調用select就不會將數據插入到它們中,而只是按照您所看到的顯示它們。 [插入示例](https://www.tutorialspoint.com/sql/sql-insert-query.htm) – Ranjeet

回答

1

如果所有表都具有相同的列數和通訊員數據類型

你可以使用聯盟「合併」表(如第一個3臺),, UNION ALL合併所有的行.. UNION合併不同的行

select a.mtime as DateTime, 
    a.tickerid as '+quotename(Concat(@product, ' ', 'TickerID'))+', 
    b.tickerid as '+quotename(Concat(@product2, ' ', 'TickerID'))+', 
    a.bid as '+quotename(Concat(@product, ' ', 'Bid'))+', 
    a.ask as '+quotename(Concat(@product, ' ', 'Ask'))+', 
    b.bid as '+quotename(Concat(@product2, ' ', 'Bid'))+', 
    b.ask as '+quotename(Concat(@product2, ' ', 'Ask'))+', 
    ISNULL(a.bid, 0) - ISNULL(b.ask, 0) as '+quotename(Concat(@product, ' ', 'Bid - ', @product2, ' ','Ask'))+', 
    ISNULL(a.ask, 0) - ISNULL(b.bid, 0) as '+quotename(Concat(@product, ' ', 'Ask - ', @product2, ' ','Bid'))+' 
from #Product_cte1 a left outer join #Product2_cte1 b 
on a.mtime = b.mtime 


UNION ALL 

select a.mtime as DateTime, 
    a.tickerid as '+quotename(Concat(@product, ' ', 'TickerID'))+', 
    b.tickerid as '+quotename(Concat(@product2, ' ', 'TickerID'))+', 
    a.bid as '+quotename(Concat(@product, ' ', 'Bid'))+', 
    a.ask as '+quotename(Concat(@product, ' ', 'Ask'))+', 
    b.bid as '+quotename(Concat(@product2, ' ', 'Bid'))+', 
    b.ask as '+quotename(Concat(@product2, ' ', 'Ask'))+', 
    ISNULL(a.bid, 0) - ISNULL(b.ask, 0) as '+quotename(Concat(@product, ' ', 'Bid - ', @product2, ' ','Ask'))+', 
    ISNULL(a.ask, 0) - ISNULL(b.bid, 0) as '+quotename(Concat(@product, ' ', 'Ask - ', @product2, ' ','Bid'))+' 
from #Product_cte2 a left outer join #Product2_cte2 b 
on a.mtime = b.mtime 


UNION ALL 

select a.mtime as DateTime, 
    a.tickerid as '+quotename(Concat(@product, ' ', 'TickerID'))+', 
    b.tickerid as '+quotename(Concat(@product2, ' ', 'TickerID'))+', 
    a.bid as '+quotename(Concat(@product, ' ', 'Bid'))+', 
    a.ask as '+quotename(Concat(@product, ' ', 'Ask'))+', 
    b.bid as '+quotename(Concat(@product2, ' ', 'Bid'))+', 
    b.ask as '+quotename(Concat(@product2, ' ', 'Ask'))+', 
    ISNULL(a.bid, 0) - ISNULL(b.ask, 0) as '+quotename(Concat(@product, ' ', 'Bid - ', @product2, ' ','Ask'))+', 
    ISNULL(a.ask, 0) - ISNULL(b.bid, 0) as '+quotename(Concat(@product, ' ', 'Ask - ', @product2, ' ','Bid'))+' 
from #Product_cte3 a left outer join #Product2_cte3 b 
on a.mtime = b.mtime 
Order by DateTime DESC