Sql 筛选特定列并返回所有列

Sql 筛选特定列并返回所有列,sql,sql-server,tsql,duplicates,distinct,Sql,Sql Server,Tsql,Duplicates,Distinct,我试图左键联接两个表并从表1中检索所有列,但基于一组列删除重复项 SELECT A.*, B.impact FROM #Site_one AS A WITH (NOLOCK) LEFT JOIN #Progress AS B With (NOLOCK) ON lower(A.site_code) = lower(B.site_code) GROUP BY A.date, A.operationid, A.worklocation, A.siteid, A.alias 这不起作用,因为A中

我试图左键联接两个表并从表1中检索所有列,但基于一组列删除重复项

SELECT A.*, B.impact
FROM #Site_one AS A WITH (NOLOCK)
LEFT JOIN #Progress AS B With (NOLOCK)
   ON lower(A.site_code) = lower(B.site_code)
GROUP BY A.date, A.operationid, A.worklocation, A.siteid, A.alias
这不起作用,因为A中有一列需要聚合或添加到
group by
子句中。问题是,我不想对这些列进行筛选,也不想对它们进行聚合

是否有办法选择a中的所有列和B中的影响列,并且仍然能够过滤掉group by子句中指定的列上的重复项

如有任何建议/帮助,将不胜感激

并且仍然能够过滤掉GROUPBY子句中指定的列上的重复项

但是,数据库如何真正知道要丢弃哪些行呢?假设你有:

Person
John, 42, Stockbroker
John, 36, Train driver
John, 58, Retired
John, 58, Metalworker
您认为“我想根据名称重复这些内容”:

那么DB应该扔掉哪三个约翰

它不能为你决定这件事;您必须编写查询,以明确要保留或丢弃的内容

您可以最大化所有内容:

SELECT name, MAX(age), MAX(job) FROM person GROUP BY name
那就行了。。但它给了你一个原始数据中从未存在过的约翰:

John, 58, Train driver
你可以说“我只保留年龄最大的人”:

。。但有两个人的最大年龄相同

您的数据库可能有一个行号,这很好:

SELECT *, row_number() over(PARTITION BY name ORDER BY age DESC) rn
FROM person
您的一位58岁的约翰将获得第1行-无法确定是哪一行,但您可以丢弃所有rn>1的行:

WITH x as (    
  SELECT *, row_number() over(PARTITION BY name ORDER BY age DESC) rn
  FROM person
)
SELECT name, age, job 
INTO newtable
FROM x
WHER rn = 1
…但是如果你丢弃了错误的约翰



您必须进一步考虑这个问题,并明确指定要扔掉什么…

MySQL或SQL Server?请删除多余的标签。请显示示例数据和预期结果(以格式化文本的形式)。停止使用。在当地的临时工作台上,这是没有意义的。要改掉坏习惯:这会让人感到不安。我想这就是为什么我需要做某种聚合,但我想知道是否有办法解决这个问题。谢谢你的详细解释
SELECT *, row_number() over(PARTITION BY name ORDER BY age DESC) rn
FROM person
WITH x as (    
  SELECT *, row_number() over(PARTITION BY name ORDER BY age DESC) rn
  FROM person
)
SELECT name, age, job 
INTO newtable
FROM x
WHER rn = 1