有没有一种方法可以将一个表粘贴到另一个表的末尾?

时间:2020-07-01 14:30:36

标签: sql sql-server

我有两个完全相同的表(一个在存档数据库中,另一个在常规数据库中)。我的目标是将所有数据合并到一个表中。我认为insert是我应该使用的函数,但是我想知道它应该是join还是merge

我尝试插入的代码是:

Insert into [DMSArchive].[dbo].[VEHICLE_TRANSACTION] 

(CAST(TRANS_DATE_TIME as DATE) Date             
,COUNT(CASE WHEN HOV_TAG_NUMBER = 0 THEN HOV_TAG_NUMBER ELSE NULL End) as "HOV"             
,COUNT(CASE WHEN HOV_TAG_NUMBER >= 1 and HOV_TAG_NUMBER <= 15300                
OR HOV_TAG_NUMBER >= 30000 and HOV_TAG_NUMBER <= 55999              
OR HOV_TAG_NUMBER >= 65000 and HOV_TAG_NUMBER <= 199999             
THEN HOV_TAG_NUMBER ELSE NULL End) as "ExpressPass"             
,COUNT(CASE WHEN HOV_TAG_NUMBER >= 15301 and HOV_TAG_NUMBER <= 29999                
OR HOV_TAG_NUMBER >= 56000 and HOV_TAG_NUMBER <= 64999              
OR HOV_TAG_NUMBER >= 200000 and HOV_TAG_NUMBER <= 299999                
THEN HOV_TAG_NUMBER ELSE NULL End) as "CDecal"              
,COUNT(CASE WHEN HOV_TAG_NUMBER > 299999 THEN HOV_TAG_NUMBER ELSE NULL End) as "Unknown"                
,COUNT (HOV_TAG_NUMBER ) as "Total Vehicles")

SELECT              
CAST(TRANS_DATE_TIME as DATE) Date              
,COUNT(CASE WHEN HOV_TAG_NUMBER = 0 THEN HOV_TAG_NUMBER ELSE NULL End) as "HOV"             
,COUNT(CASE WHEN HOV_TAG_NUMBER >= 1 and HOV_TAG_NUMBER <= 15300                
OR HOV_TAG_NUMBER >= 30000 and HOV_TAG_NUMBER <= 55999              
OR HOV_TAG_NUMBER >= 65000 and HOV_TAG_NUMBER <= 199999             
THEN HOV_TAG_NUMBER ELSE NULL End) as "ExpressPass"             
,COUNT(CASE WHEN HOV_TAG_NUMBER >= 15301 and HOV_TAG_NUMBER <= 29999                
OR HOV_TAG_NUMBER >= 56000 and HOV_TAG_NUMBER <= 64999              
OR HOV_TAG_NUMBER >= 200000 and HOV_TAG_NUMBER <= 299999                
THEN HOV_TAG_NUMBER ELSE NULL End) as "CDecal"              
,COUNT(CASE WHEN HOV_TAG_NUMBER > 299999 THEN HOV_TAG_NUMBER ELSE NULL End) as "Unknown"                
,COUNT (HOV_TAG_NUMBER ) as "Total Vehicles"                                
                
FROM [DMS].[dbo].[VEHICLE_TRANSACTION]              
Where TRANS_DATE_TIME >= '2019-01-01'               
                
GROUP BY                
CAST(TRANS_DATE_TIME as DATE)               
                
ORDER BY Date

在我看来,这应该没有任何错误,但是,我得到了错误:

Msg 102, Level 15, State 1, Line 2
Incorrect syntax near '('.

            

我尝试添加逗号,小数点和括号。我喜欢任何想法!

1 个答案:

答案 0 :(得分:0)

必须定义目标表的列名称,而不是强制转换值。

首先检查该查询是否有效

SELECT              
CAST(TRANS_DATE_TIME as DATE) Date              
,COUNT(CASE WHEN HOV_TAG_NUMBER = 0 THEN HOV_TAG_NUMBER ELSE NULL End) as "HOV"             
,COUNT(CASE WHEN HOV_TAG_NUMBER >= 1 and HOV_TAG_NUMBER <= 15300                
OR HOV_TAG_NUMBER >= 30000 and HOV_TAG_NUMBER <= 55999              
OR HOV_TAG_NUMBER >= 65000 and HOV_TAG_NUMBER <= 199999             
THEN HOV_TAG_NUMBER ELSE NULL End) as "ExpressPass"             
,COUNT(CASE WHEN HOV_TAG_NUMBER >= 15301 and HOV_TAG_NUMBER <= 29999                
OR HOV_TAG_NUMBER >= 56000 and HOV_TAG_NUMBER <= 64999              
OR HOV_TAG_NUMBER >= 200000 and HOV_TAG_NUMBER <= 299999                
THEN HOV_TAG_NUMBER ELSE NULL End) as "CDecal"              
,COUNT(CASE WHEN HOV_TAG_NUMBER > 299999 THEN HOV_TAG_NUMBER ELSE NULL End) as "Unknown"                
,COUNT (HOV_TAG_NUMBER ) as "Total Vehicles"                                

FROM [DMS].[dbo].[VEHICLE_TRANSACTION]              
Where TRANS_DATE_TIME >= '2019-01-01'               

GROUP BY                
CAST(TRANS_DATE_TIME as DATE)               

ORDER BY Date

如果以上方法可行:

我假设[DMSArchive].[dbo].[VEHICLE_TRANSACTION]的列名称为:[Date],[HOV], [ExpressPass],[CDecal], [Unknown],[Total Vehicles] 如果不是,请在插入表名称之后的列列表中使用它。

Insert into [DMSArchive].[dbo].[VEHICLE_TRANSACTION] 
( [Date],[HOV], [ExpressPass],[CDecal], [Unknown],[Total Vehicles])

SELECT              
CAST(TRANS_DATE_TIME as DATE) Date              
,COUNT(CASE WHEN HOV_TAG_NUMBER = 0 THEN HOV_TAG_NUMBER ELSE NULL End) as "HOV"             
,COUNT(CASE WHEN HOV_TAG_NUMBER >= 1 and HOV_TAG_NUMBER <= 15300                
OR HOV_TAG_NUMBER >= 30000 and HOV_TAG_NUMBER <= 55999              
OR HOV_TAG_NUMBER >= 65000 and HOV_TAG_NUMBER <= 199999             
THEN HOV_TAG_NUMBER ELSE NULL End) as "ExpressPass"             
,COUNT(CASE WHEN HOV_TAG_NUMBER >= 15301 and HOV_TAG_NUMBER <= 29999                
OR HOV_TAG_NUMBER >= 56000 and HOV_TAG_NUMBER <= 64999              
OR HOV_TAG_NUMBER >= 200000 and HOV_TAG_NUMBER <= 299999                
THEN HOV_TAG_NUMBER ELSE NULL End) as "CDecal"              
,COUNT(CASE WHEN HOV_TAG_NUMBER > 299999 THEN HOV_TAG_NUMBER ELSE NULL End) as "Unknown"                
,COUNT (HOV_TAG_NUMBER ) as "Total Vehicles"                                
                
FROM [DMS].[dbo].[VEHICLE_TRANSACTION]              
Where TRANS_DATE_TIME >= '2019-01-01'               
                
GROUP BY                
CAST(TRANS_DATE_TIME as DATE)               
                
ORDER BY Date