如果使用相同的ID,则只选择一行 - SQL Server

时间:2018-01-05 13:58:48

标签: sql sql-server

我尝试学习SQL命令并使用查询工作,该查询将列出状态为active (ID = 1)active-busy (ID = 2)的所有客户。

问题是某些客户具有相同的ID,但具有不同的类型。所以我有一个ID为1和Type 3的客户,但是同一个客户也有ID 1但是类型1,所以我试图做的只是选择具有类型1但具有相同ID的那个。因此,如果IF ID相同且Type为1和3,则仅选择Type 3.

SELECT 
    CASE 
       WHEN corel.opts LIKE 3
          THEN (SELECT corel.opts
                WHERE corel.objid = rel.id
                  AND corel.type IN (1, 2)
                  AND corel.opts = 3 
          ELSE corel.opts 1 
    END)

这不是完整的查询,因为它还有许多我无法发布的内容,但是如果你们有人告诉我如何实现这一目标,我将不胜感激。我只是不知道如何在表格中告诉IF相同的ID但是不同的类型 - 仅选择类型3.每个客户都有不同的ID,但它可以具有相同的类型。

3 个答案:

答案 0 :(得分:1)

像这样使用Row_number()

DECLARE @T TABLE
(
    Id INT,
    TypeNo INT
)

INSERT INTO @T
VALUES(1,1),(1,3),(2,1),(2,3),(3,1),(4,3)

;WITH CTE
AS
(
    SELECT
        RN = ROW_NUMBER() OVER(PARTITION BY Id ORDER BY TypeNo DESC),
        Id,
        TypeNo
        FROM @T
)
SELECT
    Id,
    TypeNo
    FROM CTE
        WHERE RN = 1

我的输入

enter image description here

输出

enter image description here

答案 1 :(得分:1)

测试场景是从Jayasurya Satheesh那里借来的,thx,投票给你了!

DECLARE @T TABLE
(
    Id INT,
    TypeNo INT
)

INSERT INTO @T
VALUES(1,1),(1,3),(2,1),(2,3),(3,1),(4,3)

- 查询将ROW_NUMBERPARTITION BY一起使用,以分别为每个T.Id开始行计数。 - SELECT TOP 1 WITH TIES所有第一行而不仅仅是第一行:

SELECT TOP 1 WITH TIES
    Id,
    TypeNo
FROM @T AS T
ORDER BY ROW_NUMBER() OVER(PARTITION BY T.Id ORDER BY T.TypeNo DESC)

如果您的Type=3不是最高类型的代码,那么简单ORDER BY T.TypeNo DESC就不够了,但您可以轻松使用CASE来解决此问题。

答案 2 :(得分:0)

据我了解,您需要以下内容:

K = (np.dot(-0.5,K) * K + 1.5) * K