sql select half half half not distinct

时间:2017-10-17 15:47:12

标签: sql sql-server

我正在使用Microsoft SQL服务器管理工​​作室。

我有一个表有一些重复(主键除外,其他一切都相同)。

例如:table_now

  • MeetingID(Primanry Key) - CompanyName - MeetingContent
  • 1 - A_Company - hello
  • 2 - A_Company - hello
  • 3 - B_company - apple
  • 4 - B_company - banana

我想要的是获得一个没有重复的新表

table_excepted

  • MeetingID(Primanry Key) - CompanyName - MeetingContent
  • 1 - A_Company - hello
  • 3 - B_company - apple
  • 4 - B_company - banana

我需要获得所有三列,但是当我使用

SELECT DISTINCT MeetingID, CompanyName, MeetingContent.....

它将获得相同的表,因为meetingID始终是不同的。 我希望得到像

这样的东西
SELECT MeetingID, DISTINCT CompanyName, MeetingContent  

但我不知道该怎么做

感谢。

4 个答案:

答案 0 :(得分:2)

根据您的示例数据,如果出现重复条目​​,您需要MIN(MeetingID)

SELECT MIN(MeetingID), CompanyName, MeetingContent
FROM table_now
GROUP BY CompanyName, MeetingContent

也就是说,您可能最好创建新表,将MeetingID设置为标识列,然后只插入其他两个不同的列值。

CREATE TABLE table_expected
(
 MeetingID int identity (1,1),
 CompanyName varchar(50),
 MeetingContent varchar(50),
 CONSTRAINT [PK_table_expected] PRIMARY KEY (MeetingID ASC)
)

INSERT INTO table_expected (CompanyName, MeetingContent) 
SELECT DISTINCT CompanyName, MeetingContent
FROM table_now

答案 1 :(得分:2)

SELECT   MIN(MeetingID),CompanyName,MeetingContent
FROM     [Table_now]
GROUP BY CompanyName,MeetingContent

答案 2 :(得分:2)

您可以使用如下的row_number:

Select * from (
    Select *, RowN = Row_Number() over (partition by CompanyName, MeetingContent order by MeetingId) from yourtable ) a
    Where a.RowN = 1

或者您可以使用带有以下关系的前1:

Select top 1 with ties * from yourtable
    order by Row_Number() over (partition by CompanyName, MeetingContent order by MeetingId)

答案 3 :(得分:1)

简短回答:使用聚合和分钟

SELECT min(meetingID) as MeetingID, companyName, MeetingContent... 
FROM table 
GROUP BY companyName, MeetingContent...