2016-02-28 67 views
1

我必须承认我仍然是SQL的新手,我试图做的是显示客户名称与客户在其账户中拥有的账户数量的查询例如:脚本对于每个拥有账户数量的客户端SQL

表:

dbo.Client

ClientId PK, BIGINT, NOT NULL 
Name  VARCHAR, NOT NULL 
Last  VARCHAR, NOT NULL 
RFC  VARCHAR, NOT NULL 

dbo.BankAccount

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 

显示一个查询:

query

我想表明的是,例如这个表,其中列“号账户“ 是我想要把他的账户的每个客户的计数类型...

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 

Temporal

我试图创建一个脚本,但我得到非常困惑与WHILE ...和我堵塞或卡住...

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 

回答

2

据我了解您的需求,你只需要一个计数和一组由:

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 

编辑:我把计数时间列

+1

我会upvote这是为了兑现你的支持,摆脱循环:-) – Shnugo