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

具有SQL帐户数的每个客户端的脚本

具有SQL帐户数的每个客户端的脚本,sql,sql-server,while-loop,Sql,Sql Server,While Loop,我必须承认我仍然是SQL的新手,我尝试做的是显示客户名称的查询以及客户在其帐户中拥有的帐户数,例如: 表: dbo.Client: ClientId PK, BIGINT, NOT NULL Name VARCHAR, NOT NULL Last VARCHAR, NOT NULL RFC VARCHAR, NOT NULL AccountId PK, BIGINT, NOT NULL ClientId FK, BIGINT, NOT NULL NoAccount

我必须承认我仍然是SQL的新手,我尝试做的是显示客户名称的查询以及客户在其帐户中拥有的帐户数,例如:

表:

dbo.Client

ClientId PK, BIGINT, NOT NULL
Name     VARCHAR, NOT NULL
Last     VARCHAR, NOT NULL
RFC      VARCHAR, NOT NULL 
AccountId PK, BIGINT, NOT NULL
ClientId  FK, BIGINT, NOT NULL
NoAccount VARCHAR, NOT NULL
Balance   DECIMAL (18,2),NOT NULL
IsCredit  BIT, NOT NULL
dbo.BankAccount

ClientId PK, BIGINT, NOT NULL
Name     VARCHAR, NOT NULL
Last     VARCHAR, NOT NULL
RFC      VARCHAR, NOT NULL 
AccountId PK, BIGINT, NOT NULL
ClientId  FK, BIGINT, NOT NULL
NoAccount VARCHAR, NOT NULL
Balance   DECIMAL (18,2),NOT NULL
IsCredit  BIT, NOT NULL
通过查询了解客户帐户

SELECT * 
FROM [dbo].[Clientes] a
INNER JOIN [dbo].[CuentasBancarias] b ON a.ClienteId = b.ClienteId
显示下一个查询:

我想展示的是这个表,其中列“Number Account” 我想在这里对他的每个客户进行计数

SELECT DISTINCT (a.ClienteId), 
    a.Apellidos, a.Nombre, a.RFC, 
    'Number Account' AS Temporal 
FROM 
    [dbo].[Clientes] a
INNER JOIN 
    [dbo].[CuentasBancarias] b ON a.ClienteId = b.ClienteId

我试图创建一个脚本,但我很困惑,而。。。我被阻挡或卡住了

DECLARE @puntocliente BIGINT
DECLARE @Cuentas BIGINT
SET @puntocliente = 1
SET @Cuentas = 0

WHILE @puntocliente <= (SELECT DISTINCT(ClienteId) FROM [dbo].[CuentasBancarias] WHERE ClienteId = @puntocliente)
BEGIN
    SET @puntocliente = @puntocliente + 1

    WHILE @puntocliente <= @puntocliente
    BEGIN
        SELECT DISTINCT(ClienteId) FROM [dbo].[CuentasBancarias] WHERE ClienteId = @puntocliente

    END

    SELECT @puntocliente

    SELECT * 
    FROM [dbo].[Clientes] a
    INNER JOIN [dbo].[CuentasBancarias] b ON a.ClienteId = b.ClienteId
    WHERE a.ClienteId = @puntocliente
END
DECLARE@puntocliente BIGINT
声明@Cuentas BIGINT
设置@puntoclient=1
设置@Cuentas=0

根据我对您的需求的理解,@puntoclient,您只需要一个计数和一个分组:

SELECT 
    a.ClienteId, 
    a.Apellidos,
    a.Nombre,
    a.RFC, 
    count(*) AS Temporal
FROM 
    [dbo].[Clientes] a
INNER JOIN 
    [dbo].[CuentasBancarias] b ON a.ClienteId = b.ClienteId
GROUP BY
    a.ClienteId, 
    a.Apellidos,
    a.Nombre,
    a.RFC

编辑:我将计数放在时间列中

我将向上投票,以感谢您支持摆脱循环:-)