Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.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 - Fatal编程技术网

SQL查询,从没有公共键的表返回值

SQL查询,从没有公共键的表返回值,sql,sql-server,Sql,Sql Server,我希望能找到一个最好的方法来实现我的目标 我有一张有交易清单的桌子。每个事务都有DateTime格式的PostDate。我有另一个表,其中包含会计期间的值。此表有以下列:;财政年度,财政月,开始日期,结束日期 我正在尝试编写一个查询,该查询将返回我的transactions表中的所有值,以及PostDate的FiscalYear和FiscalMonth。所以我想我只是想在PostDate介于StartDate和EndDate之间时返回FiscalYear和FiscalMonth值 我尝试过使用子

我希望能找到一个最好的方法来实现我的目标

我有一张有交易清单的桌子。每个事务都有DateTime格式的PostDate。我有另一个表,其中包含会计期间的值。此表有以下列:;财政年度,财政月,开始日期,结束日期

我正在尝试编写一个查询,该查询将返回我的transactions表中的所有值,以及PostDate的FiscalYear和FiscalMonth。所以我想我只是想在PostDate介于StartDate和EndDate之间时返回FiscalYear和FiscalMonth值

我尝试过使用子查询,但我对它们几乎没有经验,并且不断返回一条错误消息,即子查询返回的值超过1。我们将不胜感激

编辑:对不起,这是我尝试过的查询。为了更准确地反映我的问题,我还将标题从“无连接”更改为“无公用键”

    SELECT Transactions.PostDate, Transactions.TranKey, Transactions.CustKey, 
                      (SELECT FiscalPeriod.FiscPer
                        FROM FiscalPeriod
                        WHERE (Transactions.PostDate > CONVERT(Datetime, FiscalPeriod.StartDate, 102)) AND (Transactions.PostDate < CONVERT(DATETIME, FiscalPeriod.EndDate, 102))) AS FisPer
    FROM Transactions 

您应该能够消除子查询并使用如下连接:

SELECT Transactions.PostDate, Transactions.TranKey, Transactions.CustKey, FiscPer
FROM Transactions 
INNER JOIN FiscalPeriod ON (PostDate BETWEEN StartDate AND EndDate)
 SELECT Transactions.PostDate, Transactions.TranKey, Transactions.CustKey, 
                      (SELECT **distinct** FiscalPeriod.FiscPer
                        FROM FiscalPeriod
                        WHERE (Transactions.PostDate > CONVERT(Datetime, FiscalPeriod.StartDate, 102)) AND (Transactions.PostDate < CONVERT(DATETIME, FiscalPeriod.EndDate, 102))) AS FisPer
    FROM Transactions 
尽管这并不完全相同-即使财务表未包含postdate,子查询也会显示所有记录,如果需要,请将此联接更改为左联接。

也许您需要使用共同点联接这两个表,或者执行类似操作:

SELECT Transactions.PostDate, Transactions.TranKey, Transactions.CustKey, FiscPer
FROM Transactions 
INNER JOIN FiscalPeriod ON (PostDate BETWEEN StartDate AND EndDate)
 SELECT Transactions.PostDate, Transactions.TranKey, Transactions.CustKey, 
                      (SELECT **distinct** FiscalPeriod.FiscPer
                        FROM FiscalPeriod
                        WHERE (Transactions.PostDate > CONVERT(Datetime, FiscalPeriod.StartDate, 102)) AND (Transactions.PostDate < CONVERT(DATETIME, FiscalPeriod.EndDate, 102))) AS FisPer
    FROM Transactions 
记住,如果你有这个: 2004-01 2004-02 2004-03
对于fiscalperiod.FiscPer,distinct关键字将不起作用

您可以发布到目前为止尝试的内容吗?您可以输入您编写的sql查询吗?发布您的表结构、示例数据、所需输出,到目前为止,你已经尝试了什么?在你的标题中没有连接意味着什么?连接正是这样做的正确方式。我不知道连接可以这样使用。没有重叠的时期,所以这是完美的作品,谢谢!