Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Tsql 选择副本_Tsql - Fatal编程技术网

Tsql 选择副本

Tsql 选择副本,tsql,Tsql,我只想检索重复的记录,而不是唯一的记录。假设我的数据由如下Id 1,2,1名称A,B,A,数量10,15,20组成,比如Sno 1 Id 1,Name A Quantity 10,Sno 2 Id 1 Name A,Quantity 20 请建议 谢谢 Sasi请尝试此功能,如果有不清楚的地方请告诉我-如果您无法理解以下代码,请不要单独提问: DECLARE @DataSource TABLE ( [ID] INT ,[name] CHAR(1) ,[Quantity] IN

我只想检索重复的记录,而不是唯一的记录。假设我的数据由如下Id 1,2,1名称A,B,A,数量10,15,20组成,比如Sno 1 Id 1,Name A Quantity 10,Sno 2 Id 1 Name A,Quantity 20

请建议

谢谢
Sasi

请尝试此功能,如果有不清楚的地方请告诉我-如果您无法理解以下代码,请不要单独提问:

DECLARE @DataSource TABLE
(
    [ID] INT
   ,[name] CHAR(1)
   ,[Quantity] INT 
);

INSERT INTO @DataSource ([ID], [name], [Quantity])
VALUES (1, 'A', '10')
      ,(2, 'B', '15')
      ,(1, 'A', '20');

WITH DataSource AS
(
    SELECT *
          ,COUNT(*) OVER (PARTITION BY [ID], [name]) AS [Count]
    FROM @DataSource
)
SELECT [ID]
      ,[name]
      ,[Quantity]
FROM Datasource
WHERE [Count] > 1;

语句的第一部分使用。它允许as用高级语言计算一些东西,然后使用它。在我们的例子中,这是以下几行:

COUNT(*) OVER (PARTITION BY [ID], [name]) AS [Count]
我们正在使用
COUNT
函数的
OVER
子句,在其
PARTITION BY
子句中指定用于分组的列。如果仅运行上述代码行,则会得到以下结果:

SELECT *
      ,COUNT(*) OVER (PARTITION BY [ID], [name]) AS [Count]
FROM @DataSource;

您可以看到,
Count
列显示了有多少行包含唯一的
ID
name
值对。这些函数允许我们使用不同的分组执行聚合,并获取每行的值

现在,剩下的是从公共表表达式中查询此数据,并仅显示
计数大于
1
的行。更一般的解决方案是:

SELECT t1.Id, t1.Name, t1.Quantity
FROM MyTable t1 JOIN (
    SELECT Id, Name
    FROM MyTable
    GROUP BY Id, Name
    HAVING COUNT(*) > 1
) t2 ON t1.Id = t2.Id AND t1.Name = t2.Name

与您的请求一样,您需要创建一个新列[SNo],该列在原始列(名称、Id)上进行分区。[SNo]>1的是重复的。要进行筛选,只需获取大于1的重复项。请参见下面的模型:


样本数据最好作为+。请将您的问题包括在内,您当前的尝试和您想要的结果。
DECLARE @Records TABLE (Id int, Names VARCHAR(10), [Quantity] INT)
INSERT INTO @Records
SELECT 1, 'A',10 UNION ALL
SELECT 2, 'B',15 UNION ALL
SELECT 1, 'A',20



----To Get Duplicates -----

    SELECT SNo, Id, Names, Quantity

    FROM
    (
    SELECT 
        SNo=ROW_NUMBER()over(PARTITION BY Names,Id order by Id),
        Duplicates=COUNT(*) OVER (PARTITION BY [ID], Names),
        *
    FROM
        @Records
    )M
    WHERE 
        Duplicates>1