Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.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 server 若要在上的左连接后不为null,将删除由null扩展的任何行,即只在行上保留内部连接,即“将外部连接转换为内部连接”。始终知道作为左联接的一部分,您需要什么样的内部联接。@JasperS3000我无法获得参数1(值为0.5)的预期结果。使用您当前的数据和业_Sql Server_Where_Self Join_Ambiguity - Fatal编程技术网

Sql server 若要在上的左连接后不为null,将删除由null扩展的任何行,即只在行上保留内部连接,即“将外部连接转换为内部连接”。始终知道作为左联接的一部分,您需要什么样的内部联接。@JasperS3000我无法获得参数1(值为0.5)的预期结果。使用您当前的数据和业

Sql server 若要在上的左连接后不为null,将删除由null扩展的任何行,即只在行上保留内部连接,即“将外部连接转换为内部连接”。始终知道作为左联接的一部分,您需要什么样的内部联接。@JasperS3000我无法获得参数1(值为0.5)的预期结果。使用您当前的数据和业,sql-server,where,self-join,ambiguity,Sql Server,Where,Self Join,Ambiguity,若要在上的左连接后不为null,将删除由null扩展的任何行,即只在行上保留内部连接,即“将外部连接转换为内部连接”。始终知道作为左联接的一部分,您需要什么样的内部联接。@JasperS3000我无法获得参数1(值为0.5)的预期结果。使用您当前的数据和业务逻辑,您可以将记录分解为0.5吗?@EzLo输入参数1指示,在tblAnimals表中,只有总共有1个“怪癖”的行都被考虑了。这样的行有4行。那应该成为我们的分母。为了建立分子,我们现在查看tblJobEntries表,检查与分母中的行共享相


若要在上的左连接后不为null,将删除由null扩展的任何行,即只在行上保留内部连接,即“将外部连接转换为内部连接”。始终知道作为左联接的一部分,您需要什么样的内部联接。@JasperS3000我无法获得参数1(值为0.5)的预期结果。使用您当前的数据和业务逻辑,您可以将记录分解为0.5吗?@EzLo输入参数1指示,在tblAnimals表中,只有总共有1个“怪癖”的行都被考虑了。这样的行有4行。那应该成为我们的分母。为了建立分子,我们现在查看tblJobEntries表,检查与分母中的行共享相同日期的行(刚刚建立的),并计算至少一个CASE语句产生大于0盈余的相同日期分子行的数量。有两行这样的行,所以我们剩下的分子是2,分母是4,十进制形式等于。5。浮点数据类型的更改非常重要。但是,您的Select语句产生错误的结果,因为根据我对该测试数据的手动计算,分母仍然没有拾取a.Quirks所期望的过滤器
Input Parameter       Correct Output Parameter
     0                       0
     1                      .5
     2                      .666
     3                      .666
--This is a user defined function containing 2 CTE's and a SELECT 
--statement with 2 joins and a WHERE clause. I included that structural 
--detail in case it makes a difference.


CREATE FUNCTION [dbo].[ExampleOfQueryStructure] 
(
    @MyInputParameter int
)
RETURNS 
@MyOutputParameter TABLE 
(
    [MyPercentage] float          
)
AS
BEGIN
WITH    Quirks_CTE (AnimalDateTime, Quirks) 
        AS   
           (SELECT 
               AnimalDateTime,
               (COALESCE (Lion, 0) + COALESCE (Zebra, 0) 
               + COALESCE (Antelope, 0) + COALESCE (Giraffe, 0)) 
           FROM dbo.tblAnimals),

        Surplus_CTE 
        AS
           (SELECT 
               JobEntryDateTime,
               CASE 
                  WHEN tblJobEntries.Stance = 1
                  THEN ExitLevel5-BeginLevel
                  ELSE BeginLevel-ExitLevel5
               END AS [5_SURPLUS],

               CASE
                  WHEN tblJobEntries.Stance = 1
                  THEN ExitLevel8-BeginLevel
                  ELSE BeginLevel-ExitLevel8
               END AS [8_SURPLUS],

               CASE
                  WHEN tblJobEntries.Stance = 1
                  THEN ExitLevel20-BeginLevel
                  ELSE BeginLevel-ExitLevel20
               END AS [20_SURPLUS],

               CASE
                  WHEN tblJobEntries.Stance = 1
                  THEN ExitLevelStone-BeginLevel
                  ELSE BeginLevel-ExitLevelStone
               END AS [StoneProfit]

        FROM dbo.tblJobEntries)


INSERT INTO @MyOutputParameter ([MyPercentage])
   SELECT 
       COUNT(a.Quirks)/COUNT(b.Quirks)
       FROM QuirksCTE b
       LEFT OUTER JOIN QuirksCTE a 
           ON b.AnimalDateTime = a.AnimalDateTime
              where exists(select 1 from Surplus_CTE c
                           where a.AnimalDateTime = c.JobEntryDateTime
                           AND ([5_SURPLUS] > 0 OR [8_SURPLUS] > 0 
                                OR [20_SURPLUS] > 0 OR [StoneProfit] > 0)   
                           AND a.Quirks <= @MyInputParameter)

RETURN
END
CREATE FUNCTION [dbo].[ExampleOfQueryStructure] 
(
    @MyInputParameter int
)
RETURNS 
@MyOutputParameter TABLE 
(
    [MyPercentage] float
)
AS
BEGIN
WITH    Quirks_CTE (AnimalDateTime, Quirks) 
        AS   
           (SELECT 
               AnimalDateTime,
               (COALESCE (Lion, 0) + COALESCE (Zebra, 0) 
               + COALESCE (Antelope, 0) + COALESCE (Giraffe, 0)) 
           FROM dbo.tblAnimals),

        Surplus_CTE 
        AS
           (SELECT 
               JobEntryDateTime,
               CASE 
                  WHEN tblJobEntries.Stance = 1
                  THEN ExitLevel5-BeginLevel
                  ELSE BeginLevel-ExitLevel5
               END AS [5_SURPLUS],

               CASE
                  WHEN tblJobEntries.Stance = 1
                  THEN ExitLevel8-BeginLevel
                  ELSE BeginLevel-ExitLevel8
               END AS [8_SURPLUS],

               CASE
                  WHEN tblJobEntries.Stance = 1
                  THEN ExitLevel20-BeginLevel
                  ELSE BeginLevel-ExitLevel20
               END AS [20_SURPLUS]
            FROM dbo.tblJobEntries)

INSERT INTO @MyOutputParameter ([MyPercentage])
   SELECT 
       COUNT(a.Quirks) * 1.0 /COUNT(b.Quirks)
       FROM Quirks_CTE b
       LEFT OUTER JOIN Quirks_CTE a 
           ON b.AnimalDateTime = a.AnimalDateTime
              AND exists(select 1 from Surplus_CTE c
                           where a.AnimalDateTime = c.JobEntryDateTime
                           AND ([5_SURPLUS] > 0 OR [8_SURPLUS] > 0 
                                OR [20_SURPLUS] > 0)   
                           AND a.Quirks <= @MyInputParameter)

RETURN
END
WITH    Quirks_CTE (AnimalDateTime, Quirks) 
        AS   
           (SELECT 
               AnimalDateTime,
               (COALESCE (Lion, 0) + COALESCE (Zebra, 0) 
               + COALESCE (Antelope, 0) + COALESCE (Giraffe, 0)) 
           FROM dbo.tblAnimals),

        Surplus_CTE 
        AS
           (SELECT 
               JobEntryDateTime,
               CASE 
                  WHEN tblJobEntries.Stance = 1
                  THEN ExitLevel5-BeginLevel
                  ELSE BeginLevel-ExitLevel5
               END AS [5_SURPLUS],

               CASE
                  WHEN tblJobEntries.Stance = 1
                  THEN ExitLevel8-BeginLevel
                  ELSE BeginLevel-ExitLevel8
               END AS [8_SURPLUS],

               CASE
                  WHEN tblJobEntries.Stance = 1
                  THEN ExitLevel20-BeginLevel
                  ELSE BeginLevel-ExitLevel20
               END AS [20_SURPLUS],

              CASE
                  WHEN tblJobEntries.Stance = 1
                  THEN ExitLevelStone-BeginLevel
                  ELSE BeginLevel-ExitLevelStone
               END AS [StoneSurplus]            

            FROM dbo.tblJobEntries),
       AnimalSurplus AS
       (
         SELECT
           Q.AnimalDateTime,
           Q.Quirks,
           Surplus = CASE WHEN [5_SURPLUS] > 0 OR [8_SURPLUS] > 0 OR [20_SURPLUS] > 0 OR [StoneSurplus] > 0 THEN 1 END
         FROM
           Quirks_CTE AS Q
           LEFT JOIN Surplus_CTE AS S ON Q.AnimalDateTime = S.JobEntryDateTime
         )
   -- SELECT * FROM AnimalSurplus
   SELECT 
       COUNT(a.Quirks) * 1.0 /COUNT(b.Quirks)
       FROM AnimalSurplus b
       LEFT OUTER JOIN AnimalSurplus a 
           ON b.AnimalDateTime = a.AnimalDateTime AND a.Surplus = 1
       WHERE b.Quirks <= @MyInputParameter