【问题标题】:Creation of view with case when statement使用 case when 语句创建视图
【发布时间】:2012-01-01 02:20:17
【问题描述】:

请参阅下面的示例,以更清楚地了解我在做什么。

例子:

Create View v AS
Select T.*, S.Name, Case When T.TESTDATE = S.STUDYDATE
Then 'Yes' else 'No' END AS TakenTest
From Test T, Student S
Where T.TESTPAPERID = '12345'
And T.StudentNo = S.StudentNo;

它成功创建了视图。但是,它会填充具有相同值的重复行,例如:

TESTPAPERID      StudentNo      Name     TakenTest
12345            6437           John     Yes
12345            6437           John     No

我如何解决它,因为我已经定义了如果 T.TESTDATE = S.STUDYDATE 则显示是。否则没有。并且不会填充相同的值。

谢谢

【问题讨论】:

    标签: sql oracle select case-when create-view


    【解决方案1】:

    要只有一行,请使用:

    MAX(Case When T.TESTDATE = S.STUDYDATE Then 'Yes' else 'No' END)
    ...
    GROUP BY <all other columns, which you haven't shown>
    



    另外,这部分编码不好:

    T.TESTPAPERID = (Select TESTPAPERID From Student Where TESTPAPERID='12345')
    

    因为它是相同的:

    T.TESTPAPERID = '12345'
    

    【讨论】:

    • 为我的错误道歉。但该语句不会影响复制行的结果。
    • 虽然这看起来解决了问题,但在看起来不合适时必须在查询上使用分组或区分通常会向我表明缺少连接条件或重复行。在将分组添加到查询之前,我会先正确理解数据模型。但这只是我。
    • @MikeyByCrikey 你是说我错过了一些让我有重复行的连接条件?我已经加入了来自不同表的所有必需属性。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-23
    • 2016-12-10
    • 2016-07-08
    • 1970-01-01
    相关资源
    最近更新 更多