【问题标题】:SQL stored procedure with CASE带 CASE 的 SQL 存储过程
【发布时间】:2013-09-18 18:58:45
【问题描述】:

您好,我的存储过程有一个问题,我在这里使用了 2 个案例,第一个案例显示正确的值并且没问题,第二个案例仅显示字段 TirType 中的 Null 值,我不明白什么是问题

CREATE VIEW dbo.YUITY
    SELECT     CAST(dbo.SC5116.CODE AS int) AS код, dbo.SC5116.DESCR AS Наименование,    
     CAST(dbo.SC3420.CODE AS int) AS TIR, dbo.SC3420.SP4947 AS Date, 
                  CASE WHEN SC3420.SP4949 <> '     0   ' THEN 'ПовышСтрах' ELSE 'ОснСтрах' END AS VID, 
                  CASE WHEN dbo.SC3420.SP9214 = '714' THEN '4v' END AS TirType
      FROM         dbo.SC3420 INNER JOIN
                  dbo.SC5116 ON dbo.SC3420.SP3422 = dbo.SC5116.ID
       WHERE     (dbo.SC3420.SP4947 <> '01.01.1753')

【问题讨论】:

  • else case 中应该显示什么
  • 您在CREATE VIEW 之后缺少AS,并且您在第二个CASE 语句中也缺少END。除了语法,我怀疑它显示NULL 的原因是因为没有dbo.SC3420.SP9214 等于'714' 的行

标签: sql sql-server


【解决方案1】:

不要忘记ENDCASE 之后。如果没有指定 ELSE 并且 value 不是 '714',它将返回 NULL。

CREATE VIEW dbo.YUITY
AS
    SELECT     CAST(dbo.SC5116.CODE AS int) AS код, dbo.SC5116.DESCR AS Наименование,    
     CAST(dbo.SC3420.CODE AS int) AS TIR, dbo.SC3420.SP4947 AS Date, 
                  CASE WHEN SC3420.SP4949 <> '     0   ' THEN 'ПовышСтрах' ELSE 'ОснСтрах' END AS VID, 
                  CASE WHEN dbo.SC3420.SP9214 = '714' THEN '4v' ELSE '' END AS TirType
      FROM         dbo.SC3420 INNER JOIN
                  dbo.SC5116 ON dbo.SC3420.SP3422 = dbo.SC5116.ID
       WHERE     (dbo.SC3420.SP4947 <> '01.01.1753')

【讨论】:

  • 我是这样写的,它也给了我字段TirType的空值
  • 如果你在 ELSE 语句中指定了一个值,那么 TirType 不会为 NULL
  • 我可以输入每个值,它并不依赖,但它给了我这个值到我的所有领域
  • 但是你可以把 2 个案例放在一个存储过程中,或者我如何将 2 个案例合并到一个案例中?
  • 您可以像这样组合案例:CASE WHEN 1 = 2 THEN 'Impossible' ELSE CASE WHEN 1 &gt; 2 THEN 'More' ELSE 'Less' END END
猜你喜欢
  • 1970-01-01
  • 2011-05-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多