【问题标题】:How to get column from another table and insert into other table?如何从另一个表中获取列并插入到另一个表中?
【发布时间】:2015-06-10 15:30:32
【问题描述】:

我有两张桌子Cal_dateRPT_Invoice_Shipped

cal_data 有列

month_no
start_date
end_date

RPT_Invoice_Shipped 有列

Day_No
Date
Div_code
Total_Invoiced
Shipped_Value
Line_Shipped
Unit_Shipped
Transaction_Date

我正在使用下面的插入语句在RPT_Invoice_Shipped 表中插入数据。

insert into [Global_Report_Staging].[dbo].[RPT_Invoice_Shipped]
(Day_No, Date, Div_code, Total_Invoiced, Transaction_Date)
select , CONVERT(DATE,Getdate()) as Date, LTRIM(RTRIM(div_Code)), 
sum(tot_Net_Amt) as Total_Invoiced, (dateadd(day, -1, convert(date, getdate())))
from [Global_Report_Staging].[dbo].[STG_Shipped_Invoiced]
WHERE CONVERT(DATE,Created_date )=CONVERT(DATE,Getdate()) 
group by div_code

RPT_Invoice_Shipped 表的Day_No 列中插入时, 我必须使用公式Transaction_Date-start_date+1,其中Transaction_Date 来自STG_Shipped_Invoicedstart_date 来自Cal_date 表。

我使用的是datepart (mm, Transaction_Date),所以它给出了month_no,而这个month_no我们可以加入Cal_date表中的month_no并从Cal_date表中获取start_date,这样我们就可以使用@ 987654343@ 为公式Transaction_Date-start_date+1

但是我很难在上面的查询中安排这个。

您能指导我如何实现这一目标吗?

提前致谢

【问题讨论】:

  • cal_data 在给定月份是否有一行?

标签: sql sql-server sql-server-2008 tsql


【解决方案1】:

根据您的问题,我认为这就是您要寻找的内容

您需要使用cal_dataON DATEPART(mm, STG.Transaction_Date) = C.month_noSELECT 使用DATEDIFF(D,CONVERT(DATE,STG.Transaction_Date),C.start_date) + 1 来创建JOIN

INSERT INTO [Global_Report_Staging].[dbo].[RPT_Invoice_Shipped]
(
    Day_No,
    Date,
    Div_code,
    Total_Invoiced,
    Transaction_Date
)

SELECT DATEDIFF(D,CONVERT(DATE,STG.Transaction_Date),C.start_date) + 1,
CONVERT(DATE,Getdate()) as Date,
LTRIM(RTRIM(div_Code)), 
SUM(tot_Net_Amt) as Total_Invoiced,
(DATEADD(DAY, -1, CONVERT(DATE, getdate())))
FROM [Global_Report_Staging].[dbo].[STG_Shipped_Invoiced] STG
INNER JOIN cal_data C
ON DATEPART(mm, STG.Transaction_Date) = C.month_no
WHERE CONVERT(DATE,Created_date ) = CONVERT(DATE,Getdate()) 
GROUP BY div_code,CONVERT(DATE,STG.Transaction_Date),C.start_date

【讨论】:

  • 感谢 Ughai,它完全符合我的要求。非常感谢您宝贵的时间。
【解决方案2】:

join 基于您指定的内容

FROM [Global_Report_Staging].[dbo].[STG_Shipped_Invoiced] AS a
INNER JOIN Cal_date AS b  ON datepart (mm, Transaction_Date)) = a.month_no

insert into [Global_Report_Staging].[dbo].[RPT_Invoice_Shipped](Day_No, Date, Div_code, Total_Invoiced, Transaction_Date)
select Transaction_Date-start_date+1, CONVERT(DATE,Getdate()) as Date, LTRIM(RTRIM(div_Code)), 
sum(tot_Net_Amt) as Total_Invoiced, (dateadd(day, -1, convert(date, getdate())))
from [Global_Report_Staging].[dbo].[STG_Shipped_Invoiced] AS a
INNER JOIN Cal_date AS b  ON datepart (mm, Transaction_Date)) = a.month_no
WHERE CONVERT(DATE,Created_date )=CONVERT(DATE,Getdate()) 
group by div_code

【讨论】:

  • 感谢 sqluser 的宝贵时间。我已经使用了ughai 的查询,它对我有用。谢谢你.....
  • 不用担心。重要的是您找到了正确的答案,这篇文章将来可能对其他人有所帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多