Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 连接包含子查询的两个子查询_Sql_Sql Server_Subquery_Inner Join - Fatal编程技术网

Sql 连接包含子查询的两个子查询

Sql 连接包含子查询的两个子查询,sql,sql-server,subquery,inner-join,Sql,Sql Server,Subquery,Inner Join,对SQL来说仍然是新手。我已经四处寻找关于这个问题的答案,以及我找到的示例,我镜像了我的查询,使其看起来像示例,但是这个查询仍然不起作用。我所要做的就是连接两个子查询,但这两个子查询中都包含一个子查询。我收到以下错误: 味精156,第15级,状态1,第26行 关键字“On”附近的语法不正确 这是查询,请协助,谢谢 Select * From ( Select * From( Select x.ID, x.Date, x.USOHist, x.OVXHist, Abs(Cast((((x.USO

对SQL来说仍然是新手。我已经四处寻找关于这个问题的答案,以及我找到的示例,我镜像了我的查询,使其看起来像示例,但是这个查询仍然不起作用。我所要做的就是连接两个子查询,但这两个子查询中都包含一个子查询。我收到以下错误:

味精156,第15级,状态1,第26行 关键字“On”附近的语法不正确

这是查询,请协助,谢谢

Select *
From 
(
Select * From(
Select x.ID, x.Date, x.USOHist, x.OVXHist,
Abs(Cast((((x.USOHist / NullIf((y.USOHist),0))-1)*100) as Decimal(10,2)))         AS '%USOH',
Abs(Cast((((x.OVXHist / NullIf((y.OVXHist),0))-1)*100) as Decimal(10,2)))   AS '%OVXH'
From (Select a.Date as aDate, Max(b.Date) As aPrevDate From USO_OVX_Hist a      Inner Join USO_OVX_Hist b on a.Date > b.Date
Group By a.Date) Sub1
Inner Join USO_OVX_Hist x on Sub1.aDate = x.Date
Inner Join USO_OVX_Hist y on Sub1.aPrevDate = y.Date
) Sub2

Inner Join 
(
Select * From(
Select z.ID, z.ID2, z.Date, z.USO as USOP, z.OVX as OVXP,
Cast(((z.USO / NullIf((q.USO),0)- 1) * 100) as Decimal(10,2)) AS '%USOP',
Cast(((z.OVX / NullIf((q.OVX),0)- 1) * 100) as Decimal(10,2)) AS '%OVXP'
From (Select c.Date as cDate, Max(d.Date) As cPrevDate From USO_OVX_Price     c Inner Join USO_OVX_Price d on c.Date > d.Date
Group By c.Date) Sub3
Inner Join USO_OVX_Price z on Sub3.cDate = z.Date
Inner Join USO_OVX_Price q on Sub3.cPrevDate = q.Date
) Sub4 

On Sub2.Date = Sub4.Date

sub2
sub4
之前添加了右括号,并添加了新别名
t2
t4

select * from 
(
Select * From(
Select x.ID, x.Date, x.USOHist, x.OVXHist,
Abs(Cast((((x.USOHist / NullIf((y.USOHist),0))-1)*100) as Decimal(10,2)))         AS '%USOH',
Abs(Cast((((x.OVXHist / NullIf((y.OVXHist),0))-1)*100) as Decimal(10,2)))   AS '%OVXH'
From (Select a.Date as aDate, Max(b.Date) As aPrevDate From USO_OVX_Hist a      Inner Join USO_OVX_Hist b on a.Date > b.Date
Group By a.Date) Sub1
Inner Join USO_OVX_Hist x on Sub1.aDate = x.Date
Inner Join USO_OVX_Hist y on Sub1.aPrevDate = y.Date
)  t2 ) sub2

Inner Join 
(
Select * From (
Select z.ID, z.ID2, z.Date, z.USO as USOP, z.OVX as OVXP,
Cast(((z.USO / NullIf((q.USO),0)- 1) * 100) as Decimal(10,2)) AS '%USOP',
Cast(((z.OVX / NullIf((q.OVX),0)- 1) * 100) as Decimal(10,2)) AS '%OVXP'
From (Select c.Date as cDate, Max(d.Date) As cPrevDate From USO_OVX_Price     c Inner Join USO_OVX_Price d on c.Date > d.Date
Group By c.Date) Sub3
Inner Join USO_OVX_Price z on Sub3.cDate = z.Date
Inner Join USO_OVX_Price q on Sub3.cPrevDate = q.Date
)  t4 ) sub4

On sub2.Date = sub4.Date
使用以下命令:

SELECT *
FROM 
    (
        SELECT *
        FROM 
            (
                SELECT
                  x.id,
                  x.date,
                  x.usohist,
                  x.ovxhist,
                  ABS(CAST((((x.usohist / NULLIF((y.usohist), 0)) - 1) * 100) AS decimal(10, 2))) AS '%USOH',
                  ABS(CAST((((x.ovxhist / NULLIF((y.ovxhist), 0)) - 1) * 100) AS decimal(10, 2))) AS '%OVXH'
                FROM 
                    (
                        SELECT
                          a.date AS adate,
                          MAX(b.date) AS aprevdate
                        FROM uso_ovx_hist a
                        INNER JOIN uso_ovx_hist b
                          ON a.date > b.date
                        GROUP BY a.date
                    ) Sub1
                INNER JOIN uso_ovx_hist x
                    ON sub1.adate = x.date
                INNER JOIN uso_ovx_hist y
                    ON sub1.aprevdate = y.date
            ) Sub2
        INNER JOIN 
            (SELECT * FROM 
                (
                    SELECT
                      z.id,
                      z.id2,
                      z.date,
                      z.uso AS usop,
                      z.ovx AS ovxp,
                      CAST(((z.uso / NULLIF((q.uso), 0) - 1) * 100) AS decimal(10, 2)) AS '%USOP',
                      CAST(((z.ovx / NULLIF((q.ovx), 0) - 1) * 100) AS decimal(10, 2)) AS '%OVXP'
                    FROM 
                        (SELECT
                          c.date AS cdate,
                          MAX(d.date) AS cprevdate
                        FROM uso_ovx_price c
                        INNER JOIN uso_ovx_price d
                          ON c.date > d.date
                        GROUP BY c.date) Sub3
                        INNER JOIN uso_ovx_price z
                          ON sub3.cdate = z.date
                        INNER JOIN uso_ovx_price q
                          ON sub3.cprevdate = q.date
                ) Sub4
            ) t
        ON sub2.date = t.date
    ) t2
您可以使用联机即时SQL格式化程序来格式化SQL


谢谢,这很有效。我很难理解添加别名以使连接工作的意义。你介意给我解释一下吗?我对SQL还是有点陌生。另外,我如何准确地生成更多子查询或连接该查询上的另一个表

另一个:InnerJoin NYSEData on Sub4.Date=NYSEData.Date

我收到一个错误,说明Sub4对象无法绑定


我知道我需要在查询中添加另一个select和from标准,以便添加另一个表或子查询?请帮忙,谢谢。

新的怎么样?谢谢,效果很好。很抱歉格式化:)
Select *
From 
(
Select * From(
Select x.ID, x.Date, x.USOHist, x.OVXHist,
Abs(Cast((((x.USOHist / NullIf((y.USOHist),0))-1)*100) as Decimal(10,2)))         AS '%USOH',
Abs(Cast((((x.OVXHist / NullIf((y.OVXHist),0))-1)*100) as Decimal(10,2)))   AS '%OVXH'
From (Select a.Date as aDate, Max(b.Date) As aPrevDate From USO_OVX_Hist a      Inner Join USO_OVX_Hist b on a.Date > b.Date
Group By a.Date) Sub1
Inner Join USO_OVX_Hist x on Sub1.aDate = x.Date
Inner Join USO_OVX_Hist y on Sub1.aPrevDate = y.Date
) Sub2

Inner Join 
(
Select * From(
Select z.ID, z.ID2, z.Date, z.USO as USOP, z.OVX as OVXP,
Cast(((z.USO / NullIf((q.USO),0)- 1) * 100) as Decimal(10,2)) AS '%USOP',
Cast(((z.OVX / NullIf((q.OVX),0)- 1) * 100) as Decimal(10,2)) AS '%OVXP'
From (Select c.Date as cDate, Max(d.Date) As cPrevDate From USO_OVX_Price     c Inner Join USO_OVX_Price d on c.Date > d.Date
Group By c.Date) Sub3
Inner Join USO_OVX_Price z on Sub3.cDate = z.Date
Inner Join USO_OVX_Price q on Sub3.cPrevDate = q.Date
) Sub4 

On Sub2.Date = Sub4.Date