Oracle复杂sql选择查询

Oracle复杂sql选择查询,sql,oracle,Sql,Oracle,我有以下疑问: SELECT SUM (UNCOLLECTED) FROM LIQUIDATIONSDETAILS LD WHERE LD.COMPANYID = L.COMPANYID AND LD.GROUPID = L.GROUPID AND LD.PERIODID = L.PERIODID AND LD.FORMTYPE IN (1,

我有以下疑问:

SELECT SUM (UNCOLLECTED)
            FROM LIQUIDATIONSDETAILS LD
           WHERE     LD.COMPANYID = L.COMPANYID
                 AND LD.GROUPID = L.GROUPID
                 AND LD.PERIODID = L.PERIODID
                 AND LD.FORMTYPE IN (1, 2, 3)
L.PERIODID>'2013-2014'
时,我需要
LD.FORMTYPE输入(1,2,3,4)
否则
LD.FORMTYPE输入(1,2,3)


有什么想法吗?

这可能就是答案

SELECT SUM (UNCOLLECTED)
        FROM LIQUIDATIONSDETAILS LD
       WHERE     LD.COMPANYID = L.COMPANYID
             AND LD.GROUPID = L.GROUPID
             AND LD.PERIODID = L.PERIODID
             AND (L.PERIODID > '2013-2014' AND LD.FORMTYPE IN (1, 2, 3) ) 
             OR (L.PERIODID <= '2013-2014' AND LD.FORMTYPE IN (1, 2, 3,4) ) 
选择总和(未收款)
来自清算详细信息
其中LD.COMPANYID=L.COMPANYID
并且LD.GROUPID=L.GROUPID
并且LD.PERIODID=L.PERIODID
和(L.PERIODID>'2013-2014'和LD.FORMTYPE IN(1,2,3))

或者(L.PERIODID这可能是答案

SELECT SUM (UNCOLLECTED)
        FROM LIQUIDATIONSDETAILS LD
       WHERE     LD.COMPANYID = L.COMPANYID
             AND LD.GROUPID = L.GROUPID
             AND LD.PERIODID = L.PERIODID
             AND (L.PERIODID > '2013-2014' AND LD.FORMTYPE IN (1, 2, 3) ) 
             OR (L.PERIODID <= '2013-2014' AND LD.FORMTYPE IN (1, 2, 3,4) ) 
选择总和(未收款)
来自清算详细信息
其中LD.COMPANYID=L.COMPANYID
并且LD.GROUPID=L.GROUPID
并且LD.PERIODID=L.PERIODID
和(L.PERIODID>'2013-2014'和LD.FORMTYPE IN(1,2,3))

或者(L.PERIODID您的查询格式不正确。您有两个表别名,
L
LD
,但未定义
L

因为您打算使用
JOIN
,所以应该使用显式
JOIN
语法。一个简单的规则是:在
FROM
子句中不要使用逗号。始终使用显式
JOIN
语法:

SELECT SUM(UNCOLLECTED)
FROM LIQUIDATIONSDETAILS LD JOIN
     ??? L       -- I don't know what table "L" refers to
     ON LD.COMPANYID = L.COMPANYID AND
        LD.GROUPID = L.GROUPID AND
        LD.PERIODID = L.PERIODID 
WHERE LD.FORMTYPE IN (1, 2, 3) OR
      (LD.FORMTYPE = 4 AND L.PERIODID > '2013-2014')

您的查询格式不正确。您有两个表别名,
L
LD
,但未定义
L

因为您打算使用
JOIN
,所以应该使用显式
JOIN
语法。一个简单的规则是:在
FROM
子句中不要使用逗号。始终使用显式
JOIN
语法:

SELECT SUM(UNCOLLECTED)
FROM LIQUIDATIONSDETAILS LD JOIN
     ??? L       -- I don't know what table "L" refers to
     ON LD.COMPANYID = L.COMPANYID AND
        LD.GROUPID = L.GROUPID AND
        LD.PERIODID = L.PERIODID 
WHERE LD.FORMTYPE IN (1, 2, 3) OR
      (LD.FORMTYPE = 4 AND L.PERIODID > '2013-2014')

基于时间的周期怎么可能大于“2013-2014”,这是否等于“-1”,它是否需要大于2013或2014?Mathieu PERIODID是一个Varchar列,其值例如为:“2013-2014”“2014-2015”etcI对于oracle来说不太好,但这行得通吗?
SUM(未收集)来自清算详细信息LD,其中LD.COMPANYID=L.COMPANYID和LD.GROUPID=L.GROUPID和((LD.PERIODID=L.PERIODID和LD.FORMTYPE IN(1,2,3,4)和LD.PERIODID>2013-2014')或(LD.PERIODID=L.PERIODID和LD.FORMTYPE IN(1,2,3)和LD.PERIODID<2013-2014'))
基于时间的周期怎么可能大于'2013-2014',这是否等于'-1',它是否需要大于2013或2014?Mathieu PERIODID是一个Varchar列,其值例如为:'2013-2014''2014-2015''etcI对于oracle来说不太好,但这行得通吗?
SUM(未收集)从清算详细信息LD,其中LD.COMPANYID=L.COMPANYID和LD.GROUPID=L.GROUPID和((LD.PERIODID=L.PERIODID和LD.FORMTYPE IN(1,2,3,4)和LD.PERIODID>2013-2014')或(LD.PERIODID=L.PERIODID和LD.FORMTYPE IN(1,2,3)和LD.PERIODID<2013-2014'))