如何使用此SQL存储过程创建INSERT语句?

如何使用此SQL存储过程创建INSERT语句?,sql,sql-server,stored-procedures,sql-insert,Sql,Sql Server,Stored Procedures,Sql Insert,一位同事给了我这个存储过程,并请求我帮助根据它的结果创建一个sql INSERT语句,但我对其中一些方法有点困惑。例如,我从未在sql中见过CASE语句。我查了一下,但它的用途与我得到的不同 这是存储过程 if @ScheduleType Is Null SELECT Lu_Schedule_Types.ScheduleType, SUM(CASE WHEN InductionProduction = 1 THEN CASE WHEN (LEFT(DATENAME(Month,

一位同事给了我这个存储过程,并请求我帮助根据它的结果创建一个sql INSERT语句,但我对其中一些方法有点困惑。例如,我从未在sql中见过CASE语句。我查了一下,但它的用途与我得到的不同

这是存储过程

if @ScheduleType Is Null
SELECT Lu_Schedule_Types.ScheduleType, 
SUM(CASE WHEN InductionProduction = 1 THEN CASE WHEN (LEFT(DATENAME(Month, 
                    3)) = 'JAN' THEN ItemQty END END) AS I01,
SUM(CASE WHEN InductionProduction = 1 THEN CASE WHEN (LEFT(DATENAME(Month,                  
                    Item_Schedule.ItemScheduleDate), 3)) 
                  = 'FEB' THEN ItemQty END END) AS I02, 
SUM(CASE WHEN InductionProduction = 2 THEN ItemQty ELSE 0 END) AS PRD,
LmpProjectInfo.PlannedQty, 
LmpProjectInfo.AuthorizedQty, 
LmpProjectInfo.WbsElementID

FROM Item_Schedule 
INNER JOIN Lu_Schedule_Types 
          ON Item_Schedule.ItemScheduleType = Lu_Schedule_Types.ScheduleTypeId 
RIGHT OUTER JOIN LmpProjectInfo 
          ON Item_Schedule.ItemWbsElement = LmpProjectInfo.WbsElementID
WHERE
    (Item_Schedule.IsActive = 1) 
    AND (Item_Schedule.ItemWbsElement = @WbsElement) 
    AND (Item_Schedule.ItemScheduleDate < DATEADD(d, 1, @EndDate)) AND 
    (Item_Schedule.ItemScheduleDate >= @StartDate)
GROUP BY Lu_Schedule_Types.ScheduleType
    , Lu_Schedule_Types.ScheduleTypeId
    , LmpProjectInfo.PlannedQty
    , LmpProjectInfo.AuthorizedQty
    , LmpProjectInfo.WbsElementID
ORDER BY Lu_Schedule_Types.ScheduleTypeId
我本应该帮助他,但我到目前为止是一个数据库向导,在这里有点力不从心。我非常感谢你的帮助/建议/指导


多谢

这是一个可能适合您的快速示例。这假定要插入数据的表接受SELECT语句返回的所有值,并且这些值的类型相同

作为旁注,您可能对CASE语句感到有点困惑的原因可能是因为在SQL中使用CASE语句有两种主要方式。当。。。就像你在这里和案例的价值,当结果。。。。再多在网上搜索一下,你就会找到一些很好的例子。比如说

试试这个-

INSERT INTO dbo.table1 -- insert in table
(
      ScheduleType
    , I01
    , I02
    , PRD
    , PlannedQty
    , AuthorizedQty
    , WbsElementID
)
SELECT 
      t.ScheduleType
    , I01 = SUM(CASE WHEN InductionProduction = 1 AND MONTH(s.ItemScheduleDate) = 1 THEN ItemQty END) 
    , I02 = SUM(CASE WHEN InductionProduction = 1 AND MONTH(s.ItemScheduleDate) = 2 THEN ItemQty END)  
    , PRD = SUM(CASE WHEN InductionProduction = 2 THEN ItemQty END) 
    , i.PlannedQty
    , i.AuthorizedQty
    , i.WbsElementID
--INTO #temp_table -- or insert in temp table
FROM dbo.Item_Schedule s
JOIN dbo.Lu_Schedule_Types t ON s.ItemScheduleType = t.ScheduleTypeId 
RIGHT JOIN dbo.LmpProjectInfo i ON s.ItemWbsElement = i.WbsElementID
WHERE s.IsActive = 1
    AND s.ItemWbsElement = @WbsElement 
    AND s.ItemScheduleDate < DATEADD(d, 1, @EndDate))
    AND s.ItemScheduleDate >= @StartDate
GROUP BY 
      t.ScheduleType
    , t.ScheduleTypeId
    , i.PlannedQty
    , i.AuthorizedQty
    , i.WbsElementID
ORDER BY t.ScheduleTypeId

告诉他们你做得太过分了。我做了,呵呵。它在底部。嗯,我不知道你怎么能从这个过程的“结果”中得到一些东西,因为除了一个插入,没有结果。结果最常见的是,从SelectDeforms返回的结果是SelectDeforms。编辑。谢谢大家。我很感激。这帮了大忙。
INSERT INTO dbo.table1 -- insert in table
(
      ScheduleType
    , I01
    , I02
    , PRD
    , PlannedQty
    , AuthorizedQty
    , WbsElementID
)
SELECT 
      t.ScheduleType
    , I01 = SUM(CASE WHEN InductionProduction = 1 AND MONTH(s.ItemScheduleDate) = 1 THEN ItemQty END) 
    , I02 = SUM(CASE WHEN InductionProduction = 1 AND MONTH(s.ItemScheduleDate) = 2 THEN ItemQty END)  
    , PRD = SUM(CASE WHEN InductionProduction = 2 THEN ItemQty END) 
    , i.PlannedQty
    , i.AuthorizedQty
    , i.WbsElementID
--INTO #temp_table -- or insert in temp table
FROM dbo.Item_Schedule s
JOIN dbo.Lu_Schedule_Types t ON s.ItemScheduleType = t.ScheduleTypeId 
RIGHT JOIN dbo.LmpProjectInfo i ON s.ItemWbsElement = i.WbsElementID
WHERE s.IsActive = 1
    AND s.ItemWbsElement = @WbsElement 
    AND s.ItemScheduleDate < DATEADD(d, 1, @EndDate))
    AND s.ItemScheduleDate >= @StartDate
GROUP BY 
      t.ScheduleType
    , t.ScheduleTypeId
    , i.PlannedQty
    , i.AuthorizedQty
    , i.WbsElementID
ORDER BY t.ScheduleTypeId