查询以获取帐户显示2016年2月没有变动且余额低于$ 2,000.00

时间:2016-02-29 03:24:23

标签: sql-server sql-server-2008

我尝试制作一个脚本来获取我在SQL中需要的查询,正是我尝试的是让帐户显示在指定月份内没有移动且您的余额低于2000美元但是我试图制作它在GROUP BY中,但没有让我知道如何划分那些没有移动帐户的客户,因为我的脚本是这样的:

DECLARE @FechaMovimiento VARCHAR(10)
SET @FechaMovimiento = '0000-00-00'

IF NOT EXISTS (SELECT * FROM [dbo].[CuentasBancarias] a
                INNER JOIN [dbo].[Depositos] b
                ON a.CuentaId = b.CuentaId
                INNER JOIN [dbo].[Retiros] c
                ON a.CuentaId = c.CuentaId
                WHERE b.FechaMovimiento >= @FechaMovimiento and b.FechaMovimiento >= @FechaMovimiento 
                AND c.FechaMovimiento >= @FechaMovimiento and c.FechaMovimiento >= @FechaMovimiento
                )
BEGIN
    RAISERROR('No existen clientes sin movimientos en el mes')
END

IF EXISTS(SELECT * FROM [dbo].[CuentasBancarias] a
                INNER JOIN [dbo].[Depositos] b
                ON a.CuentaId = b.CuentaId
                INNER JOIN [dbo].[Retiros] c
                ON a.CuentaId = c.CuentaId
                WHERE b.FechaMovimiento >= @FechaMovimiento and b.FechaMovimiento >= @FechaMovimiento 
                AND c.FechaMovimiento >= @FechaMovimiento and c.FechaMovimiento >= @FechaMovimiento
                --AND a.Saldo < 2000
                )
BEGIN
    SELECT * FROM [dbo].[CuentasBancarias] WHERE Saldo <= 2000
END

这是不正确的,虽然数据显示,但如果客户没有移动呈现结果,但如果一个客户做出一些动作显示什么......我对此非常困惑。 ..我承认我没有很多SQL知识

我也试过这个查询:

SELECT cb.*
FROM [dbo].[CuentasBancarias] cb
WHERE NOT EXISTS (SELECT *
              FROM [dbo].[Retiros] r
              WHERE cb.CuentaId = r.CuentaId AND
                    r.FechaMovimiento >= '2016-02-01' AND
                    r.FechaMovimiento < '2016-03-01' 
             ) AND
  NOT EXISTS (SELECT *
          FROM [dbo].[Depositos] d
          WHERE cb.CuentaId = d.CuentaId AND
                d.FechaMovimiento >= '2016-02-01' AND
                d.FechaMovimiento < '2016-03-01' 
         )
         AND
    EXISTS (SELECT * FROM [dbo].[CuentasBancarias] WHERE Saldo < 2000)

表格顺序:

AccountBank

雷蒂罗/退出

矿床

enter image description here

1 个答案:

答案 0 :(得分:1)

SELECT cb.*
FROM   [dbo].[CuentasBancarias] cb
WHERE  cb.Saldo < 2000
AND   NOT EXISTS (SELECT *
              FROM [dbo].[Retiros] r
              WHERE cb.CuentaId = r.CuentaId AND
                    r.FechaMovimiento >= '2016-02-01' AND
                    r.FechaMovimiento < '2016-03-01' 
             ) AND
  NOT EXISTS (SELECT *
          FROM [dbo].[Depositos] d
          WHERE cb.CuentaId = d.CuentaId AND
                d.FechaMovimiento >= '2016-02-01' AND
                d.FechaMovimiento < '2016-03-01' 
         )