Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/85.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.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
IF语句时对函数的查询(MSSQL)_Sql_Sql Server_If Statement_Func - Fatal编程技术网

IF语句时对函数的查询(MSSQL)

IF语句时对函数的查询(MSSQL),sql,sql-server,if-statement,func,Sql,Sql Server,If Statement,Func,我有 我希望创建具有输入参数(如Table.Citizen_id)的函数Table_Citizens,并仅为该id输出结果。 但若Table.Citizen_id=0,那个么函数应该输出所有id的数据。我想知道如何执行这个 SELECT Table.Citizen_id AS ID, Citizens.Name as Name, Citizens.City as City FROM Table INNER JOIN Citizens ON Table.Cit

我有

我希望创建具有输入参数(如Table.Citizen_id)的函数Table_Citizens,并仅为该id输出结果。 但若Table.Citizen_id=0,那个么函数应该输出所有id的数据。我想知道如何执行这个

SELECT 
    Table.Citizen_id AS ID,
    Citizens.Name as Name,
    Citizens.City as City  
FROM Table 
INNER JOIN Citizens   
ON Table.Citizen_id = Citizens.id
GROUP BY Table.Citizen_id, Citizens.Name,Citizens.City;

这不起作用

函数中的查询如下所示:

CREATE FUNCTION dbo.Calls_ABCs(@ABC_id AS INT) 
RETURNS TABLE 
AS 
RETURN 
    SELECT 
    Calls.ABC_id AS ID,
    ABCs.Name as Name,
    ABCs.City as City, 
    COUNT(Calls.Call_start) as Count_Calls, 
    AVG(Calls.Duration) AS AVG_Call_duration,
    MAX(Calls.Duration) AS MAX_Call_duration,
    SUM(Calls.Duration) AS SUM_Call_duration,
    SUM(Calls.Cost) AS SUM_Call_cost,
    AVG(Calls.Cost) AS AVG_Calls_Cost,
FROM Calls 
INNER JOIN ABCs   
ON Calls.ABC_id = ABCs.id WHERE (@ABC_id=0 or Calls.ABC_id = @ABC_id) and  Calls.Call_Start > '2013-03-17'  GROUP BY Calls.ABC_id, ABCs.Name,ABCs.City;

GO 
通常,这是用
NULL
值而不是
0
表示的,因为
NULL
适用于所有数据类型。在这种情况下:

SELECT 
    Table.Citizen_id AS ID,
    Citizens.Name as Name,
    Citizens.City as City  
FROM Table INNER JOIN
     Citizens   
     ON Table.Citizen_id = Citizens.id
where @Id = 0 or table.Citizen_id = @id
GROUP BY Table.Citizen_id, Citizens.Name,Citizens.City;

函数中的查询如下所示:

CREATE FUNCTION dbo.Calls_ABCs(@ABC_id AS INT) 
RETURNS TABLE 
AS 
RETURN 
    SELECT 
    Calls.ABC_id AS ID,
    ABCs.Name as Name,
    ABCs.City as City, 
    COUNT(Calls.Call_start) as Count_Calls, 
    AVG(Calls.Duration) AS AVG_Call_duration,
    MAX(Calls.Duration) AS MAX_Call_duration,
    SUM(Calls.Duration) AS SUM_Call_duration,
    SUM(Calls.Cost) AS SUM_Call_cost,
    AVG(Calls.Cost) AS AVG_Calls_Cost,
FROM Calls 
INNER JOIN ABCs   
ON Calls.ABC_id = ABCs.id WHERE (@ABC_id=0 or Calls.ABC_id = @ABC_id) and  Calls.Call_Start > '2013-03-17'  GROUP BY Calls.ABC_id, ABCs.Name,ABCs.City;

GO 
通常,这是用
NULL
值而不是
0
表示的,因为
NULL
适用于所有数据类型。在这种情况下:

SELECT 
    Table.Citizen_id AS ID,
    Citizens.Name as Name,
    Citizens.City as City  
FROM Table INNER JOIN
     Citizens   
     ON Table.Citizen_id = Citizens.id
where @Id = 0 or table.Citizen_id = @id
GROUP BY Table.Citizen_id, Citizens.Name,Citizens.City;
试试这个-

查询:

where @Id is NULL or table.Citizen_id = @Id
CREATE FUNCTION dbo.[udf_getCitizens]
(
      @Citizen_id INT
)
RETURNS @Result TABLE (ID INT, Name VARCHAR(50), City VARCHAR(50)) 
AS
BEGIN

    INSERT INTO @Result(ID, Name, City)
    SELECT DISTINCT
          ID = t.Citizen_id
        , c.Name
        , c.City
    FROM dbo.[Table] t 
    JOIN dbo.Citizens c ON t.Citizen_id = Citizens.id 
    WHERE @Citizen_Id = 0 OR t.Citizen_id = @Citizen_id

    RETURN

END
执行官:

where @Id is NULL or table.Citizen_id = @Id
CREATE FUNCTION dbo.[udf_getCitizens]
(
      @Citizen_id INT
)
RETURNS @Result TABLE (ID INT, Name VARCHAR(50), City VARCHAR(50)) 
AS
BEGIN

    INSERT INTO @Result(ID, Name, City)
    SELECT DISTINCT
          ID = t.Citizen_id
        , c.Name
        , c.City
    FROM dbo.[Table] t 
    JOIN dbo.Citizens c ON t.Citizen_id = Citizens.id 
    WHERE @Citizen_Id = 0 OR t.Citizen_id = @Citizen_id

    RETURN

END
试试这个-

查询:

where @Id is NULL or table.Citizen_id = @Id
CREATE FUNCTION dbo.[udf_getCitizens]
(
      @Citizen_id INT
)
RETURNS @Result TABLE (ID INT, Name VARCHAR(50), City VARCHAR(50)) 
AS
BEGIN

    INSERT INTO @Result(ID, Name, City)
    SELECT DISTINCT
          ID = t.Citizen_id
        , c.Name
        , c.City
    FROM dbo.[Table] t 
    JOIN dbo.Citizens c ON t.Citizen_id = Citizens.id 
    WHERE @Citizen_Id = 0 OR t.Citizen_id = @Citizen_id

    RETURN

END
执行官:

where @Id is NULL or table.Citizen_id = @Id
CREATE FUNCTION dbo.[udf_getCitizens]
(
      @Citizen_id INT
)
RETURNS @Result TABLE (ID INT, Name VARCHAR(50), City VARCHAR(50)) 
AS
BEGIN

    INSERT INTO @Result(ID, Name, City)
    SELECT DISTINCT
          ID = t.Citizen_id
        , c.Name
        , c.City
    FROM dbo.[Table] t 
    JOIN dbo.Citizens c ON t.Citizen_id = Citizens.id 
    WHERE @Citizen_Id = 0 OR t.Citizen_id = @Citizen_id

    RETURN

END

谢谢对不起,我重写了我的帖子。也许是不清楚。当id=0时,我需要为所有id和其他地方的当前id输出f。@user2377214。这就是此查询的作用。再次感谢,但这在SQL SERVER 2012上不起作用。0返回空值。声明@ID INT SELECT@ID=5 SELECT*FROM dbo.udf_getCitizens(@ID)@user2377214。这大概是因为id为5的记录在“2013-03-17”之后没有记录。当您硬编码“5”并在函数外部运行它时,查询是否返回任何内容?“其中@Id为NULL或table.Citizen_Id=@Id”。我忘了这个把戏叫什么了?那它为什么有效呢?谢谢。对不起,我重写了我的帖子。也许是不清楚。当id=0时,我需要为所有id和其他地方的当前id输出f。@user2377214。这就是此查询的作用。再次感谢,但这在SQL SERVER 2012上不起作用。0返回空值。声明@ID INT SELECT@ID=5 SELECT*FROM dbo.udf_getCitizens(@ID)@user2377214。这大概是因为id为5的记录在“2013-03-17”之后没有记录。当您硬编码“5”并在函数外部运行它时,查询是否返回任何内容?“其中@Id为NULL或table.Citizen_Id=@Id”。我忘了这个把戏叫什么了?为什么它能工作?谢谢,但是如果@Citizen\u id=0 dbo。[udf\u getCitizens]应该只为所选id返回id=t.Citizen\u id,用于所有其他id。谢谢,但是如果@Citizen\u id=0 dbo。[udf\u getCitizens]应该只为所选id返回id=t.Citizen\u id。