Sql 包含带有干净select语句的联合的视图
由于对SQL非常陌生,我正在努力扩展下面的查询,因为我在下面的查询中需要另一个条件,所以我决定尝试在语句的ELSE部分使用另一个CASE。 我将通过以下声明:Sql 包含带有干净select语句的联合的视图,sql,sql-server,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
/* 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
)
因此,问题出现在以下部分
现在我想在这里输入另一个case select,但是语法方面有很多问题(请原谅),因为我想匹配这个查询中的列数。我如何才能以干净的方式正确地执行此操作 如果您的意思是您有几种可能性使用
[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]
9999-12-31
?这不完全符合Y10k……我无法从问题中看出问题所在。您是否收到错误或意外数据?@Marc抱歉,这是一个我必须调整的查询,所以不是我的代码,而是您的right@Karl我期待着一个错误(也得到它),但我发现所有的案例选择有点混乱和丑陋
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]