包含带有干净的select语句的联合的视图

时间:2014-04-01 21:57:25

标签: sql sql-server

作为SQL的新手,我正在努力扩展以下查询正弦我在下面的查询中需要另一个条件我决定尝试在语句的ELSE部分使用另一个CASE。 我将通过以下声明:

 /* AZURE_COMMENT_START */
IF NOT EXISTS(SELECT * FROM sys.databases WHERE name = 'Caring')
    CREATE DATABASE [Caring]
GO

USE [Caring]
GO
/* AZURE_COMMENT_END */


IF EXISTS (SELECT 1 FROM sys.views WHERE [name] = 'tlv_plannings')
    DROP VIEW [tlv_plannings]
GO

CREATE VIEW tlv_plannings AS 
(

    SELECT
    AanvragenPlanningBase.[Id] AS [Id],
    2 AS [Weekday],
    [FrequentieMao] AS [FrequentieMorning],
    [FrequentieMam] AS [FrequentieAfternoon],
    AanvragenPlanningBase.[Startdate] AS [Startdate],
    ISNULL(AanvragenPlanningBase.[Enddate], '9999-12-31') AS [Enddate],
    CASE WHEN AanvragenPlanningBase.KdvOpvangtijdId IS NOT NULL THEN ov1.MondayMorning ELSE ov2.MondayMorning END AS [MorningTime], 
    CASE WHEN AanvragenPlanningBase.KdvOpvangtijdId IS NOT NULL THEN ov1.MondayAfternoon ELSE ov2.MondayAfternoon END AS [AfternoonTime], 
    AanvragenPlanningBase.MondayMorning AS [PlanningMorning],
    AanvragenPlanningBase.MondayAfternoon AS [PlanningAfternoon],
    CASE WHEN AanvragenPlanningBase.KdvOpvangtijdId IS NOT NULL THEN ov1.Startdate ELSE ov2.Startdate END AS [OpvangStartdate],
    CASE WHEN AanvragenPlanningBase.KdvOpvangtijdId IS NOT NULL THEN ISNULL(ov1.Enddate, '9999-12-31') ELSE  ISNULL(ov2.Enddate, '9999-12-31') END AS [OpvangEnddate]
    FROM AanvragenPlanningBase
    LEFT OUTER JOIN OnderhoudKdvOpvangtijdBase kov on AanvragenPlanningBase.KdvOpvangtijdId = kov.Id
    LEFT OUTER JOIN OnderhoudOpvangtijdBase ov1 ON ov1.KdvOpvangtijdId = kov.Id
    LEFT OUTER JOIN OnderhoudBSoOpvangtijdBase bov on AanvragenPlanningBase.BSOOpvangtijdId = bov.Id
    LEFT OUTER JOIN OnderhoudOpvangtijdBase ov2 ON ov2.BsoOpvangtijdId = bov.Id
    UNION 
    SELECT
    AanvragenPlanningBase.[Id] AS [Id],
    3 AS [Weekday],
    [FrequentieDio] AS [FrequentieMorning],
    [FrequentieDim] AS [FrequentieAfternoon],
    AanvragenPlanningBase.[Startdate] AS [Startdate],
    ISNULL(AanvragenPlanningBase.[Enddate], '9999-12-31') AS [Enddate],
    CASE WHEN AanvragenPlanningBase.KdvOpvangtijdId IS NOT NULL THEN ov1.TuesdayMorning ELSE ov2.TuesdayMorning END AS [MorningTime], 
    CASE WHEN AanvragenPlanningBase.KdvOpvangtijdId IS NOT NULL THEN ov1.TuesdayAfternoon ELSE ov2.TuesdayAfternoon END AS [AfternoonTime], 
    AanvragenPlanningBase.TuesdayMorning AS [PlanningMorning],
    AanvragenPlanningBase.TuesdayAfternoon AS [PlanningAfternoon],
    CASE WHEN AanvragenPlanningBase.KdvOpvangtijdId IS NOT NULL THEN ov1.Startdate ELSE ov2.Startdate END AS [OpvangStartdate],
    CASE WHEN AanvragenPlanningBase.KdvOpvangtijdId IS NOT NULL THEN ISNULL(ov1.Enddate, '9999-12-31') ELSE  ISNULL(ov2.Enddate, '9999-12-31') END AS [OpvangEnddate]
    FROM AanvragenPlanningBase
    LEFT OUTER JOIN OnderhoudKdvOpvangtijdBase kov on AanvragenPlanningBase.KdvOpvangtijdId = kov.Id
    LEFT OUTER JOIN OnderhoudOpvangtijdBase ov1 ON ov1.KdvOpvangtijdId = kov.Id
    LEFT OUTER JOIN OnderhoudBSoOpvangtijdBase bov on AanvragenPlanningBase.BSOOpvangtijdId = bov.Id
    LEFT OUTER JOIN OnderhoudOpvangtijdBase ov2 ON ov2.BsoOpvangtijdId = bov.Id
    UNION 
    SELECT
    AanvragenPlanningBase.[Id] AS [Id],
    4 AS [Weekday],
    [FrequentieWoo] AS [FrequentieMorning],
    [FrequentieWom] AS [FrequentieAfternoon],
    AanvragenPlanningBase.[Startdate] AS [Startdate],
    ISNULL(AanvragenPlanningBase.[Enddate], '9999-12-31') AS [Enddate],
    CASE WHEN AanvragenPlanningBase.KdvOpvangtijdId IS NOT NULL THEN ov1.WednesdayMorning ELSE ov2.WednesdayMorning END AS [MorningTime], 
    CASE WHEN AanvragenPlanningBase.KdvOpvangtijdId IS NOT NULL THEN ov1.WednesdayAfternoon ELSE ov2.WednesdayAfternoon END AS [AfternoonTime], 
    AanvragenPlanningBase.WednesdayMorning AS [PlanningMorning],
    AanvragenPlanningBase.WednesdayAfternoon AS [PlanningAfternoon],
    CASE WHEN AanvragenPlanningBase.KdvOpvangtijdId IS NOT NULL THEN ov1.Startdate ELSE ov2.Startdate END AS [OpvangStartdate],
    CASE WHEN AanvragenPlanningBase.KdvOpvangtijdId IS NOT NULL THEN ISNULL(ov1.Enddate, '9999-12-31') ELSE  ISNULL(ov2.Enddate, '9999-12-31') END AS [OpvangEnddate]
    FROM AanvragenPlanningBase
    LEFT OUTER JOIN OnderhoudKdvOpvangtijdBase kov on AanvragenPlanningBase.KdvOpvangtijdId = kov.Id
    LEFT OUTER JOIN OnderhoudOpvangtijdBase ov1 ON ov1.KdvOpvangtijdId = kov.Id
    LEFT OUTER JOIN OnderhoudBSoOpvangtijdBase bov on AanvragenPlanningBase.BSOOpvangtijdId = bov.Id
    LEFT OUTER JOIN OnderhoudOpvangtijdBase ov2 ON ov2.BsoOpvangtijdId = bov.Id
    UNION 
    SELECT
    AanvragenPlanningBase.[Id] AS [Id],
    5 AS [Weekday],
    [FrequentieDoo] AS [FrequentieMorning],
    [FrequentieDom] AS [FrequentieAfternoon],
    AanvragenPlanningBase.[Startdate] AS [Startdate],
    ISNULL(AanvragenPlanningBase.[Enddate], '9999-12-31') AS [Enddate],
    CASE WHEN AanvragenPlanningBase.KdvOpvangtijdId IS NOT NULL THEN ov1.ThursdayMorning ELSE ov2.ThursdayMorning END AS [MorningTime], 
    CASE WHEN AanvragenPlanningBase.KdvOpvangtijdId IS NOT NULL THEN ov1.ThursdayAfternoon ELSE ov2.ThursdayAfternoon END AS [AfternoonTime], 
    AanvragenPlanningBase.ThursdayMorning AS [PlanningMorning],
    AanvragenPlanningBase.ThursdayAfternoon AS [PlanningAfternoon],
    CASE WHEN AanvragenPlanningBase.KdvOpvangtijdId IS NOT NULL THEN ov1.Startdate ELSE ov2.Startdate END AS [OpvangStartdate],
    CASE WHEN AanvragenPlanningBase.KdvOpvangtijdId IS NOT NULL THEN ISNULL(ov1.Enddate, '9999-12-31') ELSE  ISNULL(ov2.Enddate, '9999-12-31') END AS [OpvangEnddate]
    FROM AanvragenPlanningBase
    LEFT OUTER JOIN OnderhoudKdvOpvangtijdBase kov on AanvragenPlanningBase.KdvOpvangtijdId = kov.Id
    LEFT OUTER JOIN OnderhoudOpvangtijdBase ov1 ON ov1.KdvOpvangtijdId = kov.Id
    LEFT OUTER JOIN OnderhoudBSoOpvangtijdBase bov on AanvragenPlanningBase.BSOOpvangtijdId = bov.Id
    LEFT OUTER JOIN OnderhoudOpvangtijdBase ov2 ON ov2.BsoOpvangtijdId = bov.Id
    UNION 
    SELECT
    AanvragenPlanningBase.[Id] AS [Id],
    6 AS [Weekday],
    [FrequentieVro] AS [FrequentieMorning],
    [FrequentieVrm] AS [FrequentieAfternoon],
    AanvragenPlanningBase.[Startdate] AS [Startdate],
    ISNULL(AanvragenPlanningBase.[Enddate], '9999-12-31') AS [Enddate],
    CASE WHEN AanvragenPlanningBase.KdvOpvangtijdId IS NOT NULL THEN ov1.FridayMorning ELSE ov2.FridayMorning END AS [MorningTime], 
    CASE WHEN AanvragenPlanningBase.KdvOpvangtijdId IS NOT NULL THEN ov1.FridayAfternoon ELSE ov2.FridayAfternoon END AS [AfternoonTime], 
    AanvragenPlanningBase.MondayMorning AS [PlanningMorning],
    AanvragenPlanningBase.MondayAfternoon AS [PlanningAfternoon],
    CASE WHEN AanvragenPlanningBase.KdvOpvangtijdId IS NOT NULL THEN ov1.Startdate ELSE ov2.Startdate END AS [OpvangStartdate],
    CASE WHEN AanvragenPlanningBase.KdvOpvangtijdId IS NOT NULL THEN ISNULL(ov1.Enddate, '9999-12-31') ELSE  ISNULL(ov2.Enddate, '9999-12-31') END AS [OpvangEnddate]
    FROM AanvragenPlanningBase
    LEFT OUTER JOIN OnderhoudKdvOpvangtijdBase kov on AanvragenPlanningBase.KdvOpvangtijdId = kov.Id
    LEFT OUTER JOIN OnderhoudOpvangtijdBase ov1 ON ov1.KdvOpvangtijdId = kov.Id
    LEFT OUTER JOIN OnderhoudBSoOpvangtijdBase bov on AanvragenPlanningBase.BSOOpvangtijdId = bov.Id
    LEFT OUTER JOIN OnderhoudOpvangtijdBase ov2 ON ov2.BsoOpvangtijdId = bov.Id
)

所以问题出现在以下部分

 ELSE  ISNULL(ov2.Enddate, '9999-12-31') END AS [OpvangEnddate]

现在这里是我想放入另一个案例选择但我在语法上遇到了很多麻烦(原谅我),因为我想匹配此查询中的列数。我怎样才能以干净的方式做到这一点?

1 个答案:

答案 0 :(得分:0)

如果你的意思是[OpvangEnddate]有几种可能性,你可能想要这样的东西。我添加了回车符,以明确CASE...END结构可以有多个子句:

CASE 
    WHEN AanvragenPlanningBase.KdvOpvangtijdId IS NOT NULL 
      THEN ISNULL(ov1.Enddate, '9999-12-31') 
    WHEN 'something else' = 'is true'
      THEN 'some other value'
    ELSE  
      ISNULL(ov2.Enddate, '9999-12-31') 
END AS [OpvangEnddate]
相关问题