【问题标题】:How can I get different data with case?如何通过案例获得不同的数据?
【发布时间】:2021-01-24 05:08:13
【问题描述】:

在视图中如果 lokasyonno= 27 ,我希望第一个块运行,如果不是第二个块。我该怎么做?

我尝试用 switch case 结构来做,但由于没有公共列,我无法得到结果。

第一

SELECT round(UH.NETTUTAR)
       FROM TBL_IRSALIYE IR
            INNER JOIN TBL_URUNHAREKETLERI UH ON UH.IRSALIYEID = IR.IRSALIYEID
            INNER JOIN TBL_URUNLER U ON UH.URUNID = U.URUNID
      WHERE     IR.LOKASYONNO = 27
            AND IR.TUR = 7
            AND IR.IPTAL = 0
            AND IR.ONAY = 1
            AND IR.BILLED = 1
            AND IR.INTERNET = 60
            AND ROWNUM <= 10
            AND IR.TARIH > TO_DATE ('2020-09-27 ', 'yyyy-mm-dd ')
            AND IR.TARIH <= TO_DATE ('2020-10-05', 'yyyy-mm-dd ')

     NVL (
                             (SELECT ROUND (
                                        SUM (
                                           CASE DOCUMENT_TYPE
                                              WHEN 2
                                              THEN
                                                 (CASE TRANSACTION_TYPE
                                                     WHEN 0
                                                     THEN
                                                          0
                                                        - (  LINE_TOTAL_VALUE
                                                           - LINE_TOTL_DISCOUNT)
                                                     ELSE
                                                          LINE_TOTAL_VALUE
                                                        - LINE_TOTL_DISCOUNT
                                                  END)
                                              ELSE
                                                 (CASE TRANSACTION_TYPE
                                                     WHEN 1
                                                     THEN
                                                          0
                                                        - (  LINE_TOTAL_VALUE
                                                           - LINE_TOTL_DISCOUNT)
                                                     ELSE
                                                        (  LINE_TOTAL_VALUE
                                                         - LINE_TOTL_DISCOUNT)
                                                  END)
                                           END),
                                        10)
                                FROM TBL_TRANSACTION_LINES
                               WHERE     (TRANSACTION_TYPE NOT IN (10, 30))
                                     AND STORE_NO = LOK.LOKASYONNO
                                     AND (URUNID = TBL_URUNLER.URUNID)
                                     AND TRANSACTION_DATE >
                                            TO_DATE ('2020-09-27 0:0:0',
                                                     'yyyy-mm-dd HH24:MI:SS')
                                     AND TRANSACTION_DATE <=
                                            TO_DATE ('2020-10-04 0:0:0',
                                                     'yyyy-mm-dd HH24:MI:SS')),
                             0)
                             AS HAFTALIKKASASATISTUTARI

【问题讨论】:

  • 请将查询减少到尽可能少地证明问题的简单版本 - 所有这些连接等都与您的问题无关。
  • 请在代码问题中给出minimal reproducible example--cut & paste & runnable code,包括最小的代表性示例输入作为代码;期望和实际输出(包括逐字错误消息);标签和版本;明确的规范和解释。给出尽可能少的代码,即您显示的代码可以通过您显示的代码扩展为不正常的代码。 (调试基础。)对于包含 DBMS 和 DDL(包括约束和索引)的 SQL,并以表格格式作为代码输入。 How to Ask 暂停总体目标的工作,将代码砍到第一个表达式,没有给出你期望的内容,说出你期望的内容和原因。

标签: sql oracle join switch-statement case


【解决方案1】:

使用两个查询中的union,但在第一个查询中添加一个not exists() 作为第二个查询的附加条件:

<first query>
union all
<second query>
where not exists (<first query>)

【讨论】:

  • 它很复杂。我无法解决问题。哪里不存在(完整代码块)?
  • 其给子查询返回多行错误
  • @crashed 此语法不会导致该错误。该错误必须在第一个或第二个查询。如果您可以独立运行每个,那么这种方法将起作用; not exists(...) 旨在处理返回多行的查询
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-29
  • 2017-05-22
  • 1970-01-01
  • 1970-01-01
  • 2023-04-04
相关资源
最近更新 更多