2013-04-29 72 views
-2

一位同事给了我这个存储过程,并要求帮助根据其结果创建一个sql INSERT语句,但对某些方法有些困惑。例如,我从来没有在sql中看过CASE语句。我查了一下,但用法与我所得到的不同。如何使用此SQL存储过程来创建INSERT语句?

这里是存储过程

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 

我应该可以帮助他了,但我目前数据库向导是,和我一点点在这里我的深度。我真的很感激帮助/建议/方向。

非常感谢!

+7

告诉他们你是你的深度。 – 2013-04-29 14:25:24

+0

我做了嘿嘿。它的底部。 – 2013-04-29 14:26:24

+2

嗯,我不确定你如何从这个过程的'结果'中得到某些东西,因为没有结果,只有一个插入。 (结果最常被称为是什么从选择返回) – DrCopyPaste 2013-04-29 14:31:51

回答

2

这是可能适用于您的快速示例。这假定你想要插入数据的表取得了从SELECT声明返回的所有值,并且它们是相同的类型。

请注意,您可能对CASE语句有点困惑的原因可能是由于在SQL中使用它们有两种主要方式。 CASE WHEN...像你这里和CASE #value# WHEN #result# THEN...。在网络上稍微搜索一下会给你带来一些很好的例子。例如this one

INSERT INTO TABLE_NAME 
(
    ScheduleType, 
    I01, 
    I02, 
    PRD, 
    PlannedQty, 
    AuthorizedQty, 
    WbsElementID 
) 
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 
+0

谢谢大家。我很感激。这非常有帮助。 – 2013-04-30 13:32:35

1

尝试这一个 -

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 
相关问题