【问题标题】:Rank function () to work as 1 or 0 in SQL Serverrank 函数 () 在 SQL Server 中作为 1 或 0 工作
【发布时间】:2015-05-07 08:02:52
【问题描述】:

我需要帮助才能找到在 SQL Server 中执行以下操作的方法。

基本上,在 Excel 中,我可以编写如下内容:

IF(COUNTIF(A:A:A2) > 1:1:0))

此 Excel 代码的作用是,如果 IT 在客户编号列中找到重复的客户编号,则公式返回 1,否则返回 0。

我在我的代码中包含了这个

Select
    Contract_nr,
    Customer_number,
    Rank()OVER(ORDER BY customer_number) AS tester
    Productname,
    Sales_date
From 
    table namn

rank() 返回 1100、1105 等等...

如果客户编号重复,我如何才能使我的测试列返回 1 或 0?

【问题讨论】:

  • 如果您想获得不同的计数,请尝试“从表名中选择计数(不同的客户编号)...”
  • 使用适当的软件(MySQL、Oracle、DB2...)和版本标记数据库问题很有帮助,例如sql-server-2014。语法和功能的差异通常会影响答案。 LAG/LEAD 可能会有所帮助,但这取决于数据库和版本。
  • 还可以查看将重置字段数字的 PARTITION 关键字。 msdn.microsoft.com/en-us/library/ms189461.aspx
  • 有趣。如何在 SQL Server 2012 中解决这个问题?添加此测试器列以显示客户编号是否重复的目的是查看客户是否购买了多个产品。通常我在excel中这样做。在 SQL Server 2012 中这样做会很棒

标签: sql-server tsql rank


【解决方案1】:

我会做一个自我加入。如果您是 SQL Server 2012 或更高版本,Lead and Lag 是一个不错的选择。但这应该工作得很好。

SELECT DISTINCT 
        Contract_nr,
        Customer_number,
        CASE WHEN t2.Contract_nr IS NOT NULL THEN 1 ELSE 0 END AS [CustomerNumIsRepeat],
        Productname,
        Sales_date
    FROM table as t1
    LEFT JOIN table as t2 ON t1.Customer_number = t2.Customer_Number AND t1.Contract_nr != t2.Contract_nr

【讨论】:

  • 添加了一个 distinct 以防止每个 customer_number 有多个重复记录时重复行。
【解决方案2】:

我会使用WITH 子句来获取每个客户编号的不同计数,如下所示:

; With CustomerNumberCount AS
(
    SELECT Customer_number, COUNT(*) AS RecordCount
    FROM table
    GROUP BY Customer_number
)
SELECT t1.*
    , CASE WHEN t2.RecordCount > 1 THEN 1 ELSE 0 END AS [CustomerNumIsRepeat]
FROM table as t1
    LEFT JOIN CustomerNumberCount as t2 ON t1.Customer_number = t2.Customer_Number

这将确保您只从 t1 获得 1 行(如果客户编号出现 2 次或更多次,则可能会多次获得同一行)。

【讨论】:

    【解决方案3】:
    with cte as (
    Select
        Contract_nr,
        Customer_number,
        case
           when count(*) over (partition by Customer_number) > 1 then 1
           else 0
        end as tester
        Productname,
        Sales_date
    From 
        table namn
    

    【讨论】:

    • 我不知道你可以使用 over 和 count!
    • 是的。您可以将它与任何聚合或窗口函数一起使用。
    猜你喜欢
    • 2023-01-18
    • 2021-01-30
    • 2011-11-09
    • 1970-01-01
    • 2022-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多