【问题标题】:How to iterate through sql table and fetch distinct values from another into a result table如何遍历 sql 表并将不同值从另一个表中提取到结果表中
【发布时间】:2019-08-16 02:41:33
【问题描述】:

我有一组表格来控制客户每月的预算。这是创建的关系:

现在,我正在尝试创建一个过程,该过程将根据当前登录的用户 ([dbo].[Clientes_Usuarios]) 从表 [dbo].[Ppto_IngresosRubros] 中带来不同的“rubro”字段以及他/她在 [dbo].[Ppto_Master] 中创建的预算

[dbo].[Ppto_IngresosRubros] 中存储了以下数据:

ID    IdPpto    Rubro
3     4         Ventas desarrollo tecnológico
4     4         Ventas diseño estratégico
5     5         Ventas desarrollo tecnológico
5     5         Ventas diseño estratégico

表[dbo].[Ppto_Master]有如下数据:

ID    IdCliente    IdModulo    FechaPpto    
4     1            1           2018-01-01
5     1            1           2018-02-01

到目前为止,我的代码会给我带来想要的结果,但在单独的一组表格中,所以我不能用它来填充转发器(在项目的视图中 - ASP.Net WebForms VB):

而我需要的是:

Rubro
Ventas desarrollo tecnológico
Ventas diseño estratégico

这是我的代码:

DECLARE @usuario varchar(max) = 'eduardo@conceptod.co'

DECLARE @idcliente int
SET @idcliente =
(
    SELECT
        [W1].[ID] 
    FROM [dbo].[Clientes_Info_W1] [W1]
    INNER JOIN
        [dbo].[Clientes_Usuarios] [U]
        ON [W1].[ID] = [U].[IdCliente]
    WHERE   
        ([U].[CorreoElectronico] = @usuario)  
)

DECLARE @MyCursor CURSOR;
DECLARE @idppto int;
BEGIN
    SET @MyCursor = CURSOR FOR
    (
        SELECT 
            [M].[ID]
        FROM [dbo].[Ppto_Master] [M]
        WHERE
            ([M].[IdCliente] = @idcliente) 

    )
    OPEN @MyCursor 
    FETCH NEXT FROM @MyCursor 
    INTO @idppto

    WHILE @@FETCH_STATUS = 0
    BEGIN
    (
        SELECT
            DISTINCT([I].[Rubro]) 
        FROM [dbo].[Ppto_IngresosRubros] [I]
        WHERE
            ([I].[ID] = @idppto)
    )
      FETCH NEXT FROM @MyCursor 
      INTO @idppto
    END; 

    CLOSE @MyCursor ;
    DEALLOCATE @MyCursor;
END;

帮助!谢谢!

【问题讨论】:

  • 我怀疑你是否需要在这里使用这么多游标。样本数据和预期输出会有所帮助。
  • 嗯,你的评论让我想到了另一种方法。我通过使用连接实现了它。谢谢
  • @epaezr 。 . .如果不再相关,您应该关闭该问题。

标签: sql sql-server


【解决方案1】:

通过 Join 解决了:

CREATE PROCEDURE [dbo].[Ppto_IngresosRubros_Rubros_Tips_IdCliente]
(
    @usuario varchar(max)
)
AS
BEGIN

DECLARE @idcliente int
SET @idcliente =
(
    SELECT
        [W1].[ID] 
    FROM [dbo].[Clientes_Info_W1] [W1]
    INNER JOIN
        [dbo].[Clientes_Usuarios] [U]
        ON [W1].[ID] = [U].[IdCliente]
    WHERE   
        ([U].[CorreoElectronico] = @usuario)  
)

SELECT
    DISTINCT TOP(5) ([I].[Rubro]) AS [Rubro]
FROM [dbo].[Ppto_IngresosRubros] [I]
INNER JOIN
    [dbo].[Ppto_Master] [M]
    ON [I].[IdPpto] = [M].[ID] 
INNER JOIN
    [dbo].[Clientes_Info_W1] [W1]
    ON [M].[IdCliente] = [W1].[ID]
WHERE
    ([W1].[ID] = @idcliente);
END
GO

谢谢!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-23
    • 2022-07-31
    • 2017-07-16
    • 2022-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多