【发布时间】:2019-09-25 19:57:52
【问题描述】:
编辑 视图如下所示
CREATE VIEW [dbo].[vw] AS
SELECT
d.Column1
,d.Column2
,d.DocumentNo
,d.Title AS 'abc'
,d.column3 AS 'def'
,d.column4
,d.column5 AS 'adad'
,d.CODE
,d.ARCHIVED
,d.Revised
,d.Received
,d.APPROVED
,d.Act
,d.Cat
,d.Column8
,d.Column9
,d.[req]
, CASE WHEN p.ProjNo = '12345' and d.DocumentNo = LEFT(d.DocumentNo,8)) = 12345678 THEN p.ProjNo = 12345678 and p.ProjTitle = 'title1'
ELSE CASE WHEN p.ProjNo = '12345' and (d.DocumentNo = LEFT(d.DocumentNo,8)) = 23456789 THEN p.ProjNo = 23456789 and p.ProjTitle = 'Title2'
ELSE CASE WHEN p.projNo = '12345' and (d.DocumentNo = LEFT(d.DocumentNo,8)) = 34567890 THEN p.projNo = `34567890` and p.projTitile = 'Title3'
ELSE p.ProjNo END AS [BTProjNo]
,p.ID
FROM [DB].[dbo].[Document] d
INNER JOIN [DB].[dbo].[Project] p ON d.ProjNo = p.ProjNo
由于新的公司标准,我正在尝试对已编写的文件进行更改。在数据库中有一个 projNo 列,DocumentNo 列。现在公司将一个项目拆分为3个小项目,项目编号为DocumentNo的前8个字符。
尝试:我尝试使用 CASE 表达式和 LEFT 函数来拆分 DocumentNo 并使其成为新的 projNo。但我不断收到错误。我试过带/不带括号是一样的
代码:
CASE WHEN p.ProjNo = '12345' and d.DocumentNo = LEFT(d.DocumentNo,8)) = 12345678 THEN p.ProjNo =
12345678 and p.ProjTitle = ' '
ELSE CASE WHEN p.ProjNo = '12345' and (d.DocumentNo = LEFT(d.DocumentNo,8)) = 23456789 THEN
p.ProjNo = 23456789 and p.ProjTitle = ' '
ELSE CASE WHEN p.projNo = '12345' and (d.DocumentNo = LEFT(d.DocumentNo,8)) = 34567890 THEN
p.projNo = `34567890` and p.projTitile = ' '
ELSE p.ProjNo END AS [BTProjNo]
错误:
1) 在需要条件的地方指定非布尔类型的表达式 - 显示在 d.DocumentNo 的值处
2) 所有 3 ELSE 附近的语法不正确。期待 AND,OR,THEN
3) 所有 3 '=' 附近的语法不正确,期望 AND、OR、THEN
谁能告诉我我做错了什么并帮助我朝着正确的方向前进?
【问题讨论】:
-
当你有一个 CASE WHEN A = B = C 时你想做什么?那是无效的语法,我不明白你认为它应该做什么。
-
您的代码充满了语法错误。发布示例数据和预期结果并说明您想要做什么。
-
@avery 我正在尝试更改视图。目前它具有 p.projNo、d.DocumentNo 和所有连接。我正在尝试对 p.ProjNo 列使用 CASE 语句来包含 3 个新的 p.projNo。 3 个新的 p.projNo 是 d.DocumentNo .. 中的前 8 个字符。希望这很清楚吗?我是新手,现在正在吸吮它..
-
您需要发布现有视图,或者至少发布足够多的视图,以便我们可以看到您要修改的内容。
-
我仍然认为我的回答符合您的描述。它要么需要替换 select 中的 p.ProjNo,要么可能需要添加到子查询甚至连接子句中。
标签: sql sql-server case