3

我有一个 select 语句,并且仅当其中至少一个值与今天相差 60 天时才返回所有值。问题是我有一个外部应用程序,它返回我想要比较的列,它们来自不同的表(一个属于现金项目,另一个属于卡项目)。
考虑到我有以下几点:

OUTER APPLY (
    SELECT COUNT(*) AS quantity, MIN(date) AS item_date
        FROM dbo.get_cash_items(loans.id_cash) AS cash_item
        HAVING loans.id_product_type = 1 --Cash
    UNION
    SELECT COUNT(*) AS quantity, MIN(date) AS item_date
        FROM dbo.get_card_items(loans.id_card) AS card_item
        HAVING loans.id_product_type = 2 --Card
) AS items

我只想在 时返回所有行DATEDIFF(DAY, MIN(items.item_date), GETDATE()) >= 60,但即使只有一个符合此条件,我也想要它们全部。
这样做的最佳方法是什么?

编辑
为了更清楚,我将解释用例:
我需要显示每笔贷款的项目,只有当客户迟到超过到期日的 60 天时

4

3 回答 3

1

我也不确定,你期望什么,但是怎么样:

WITH items
     AS (SELECT Count(*)  AS quantity,
                Min(date) AS item_date
         FROM   dbo.Get_cash_items(loans.id_cash) AS cash_item
         HAVING loans.id_product_type = 1
         UNION
         SELECT Count(*)  AS quantity,
                Min(date) AS item_date
         FROM   dbo.Get_card_items(loans.id_card) AS card_item
         HAVING loans.id_product_type = 2)
SELECT a.*
FROM   items AS a,
       (SELECT TOP 1 *
        FROM   items AS b
        WHERE  Datediff(day, b.item_date, Getdate()) >= 60) AS c  

这是一种 CROSS JOIN,其中表C将有一个或零行,具体取决于如果满足条件 - 它将连接到其他表中的每一行。

于 2012-09-18T18:03:58.420 回答
0

你有没有尝试过这样的事情?

SELECT a.quantity, a.item_date
FROM
    (SELECT COUNT(*) AS quantity, MIN(date) AS item_date
        FROM dbo.get_cash_items(loans.id_cash) AS cash_item
        HAVING loans.id_product_type = 1
    UNION
    SELECT COUNT(*) AS quantity, MIN(date) AS item_date
        FROM dbo.get_card_items(loans.id_card) AS card_item
        HAVING loans.id_product_type = 2) a 
WHERE DATEDIFF(day, a.item_date, GETDATE()) >= 60
于 2012-09-18T17:29:11.783 回答
0

通常,我使用 CTE 来选择要选择的记录的键,然后加入该键。下面是一个例子的尝试:

with LateClients as
(
    SELECT LoadId FROM Payment Where /*payment date later than 60 days*/
)

SELECT     p.LoanId, 
           p.UserId 
FROM       Payment as p
INNER JOIN LateClients as LC
ON         p.LoanId = lc.LoanId 
OrderBy    p.LoanId, p.UserId

我知道这与您发布的代码有点不同,但这是一个应该解释这个概念的简化示例。祝你好运!

于 2012-09-18T18:10:48.133 回答