Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.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
sql选择半相异半不相异_Sql_Sql Server - Fatal编程技术网

sql选择半相异半不相异

sql选择半相异半不相异,sql,sql-server,Sql,Sql Server,我正在使用Microsoft SQL server management studio 我有一个有一些重复的表(除了主键,其他都是一样的) 例如:现在使用表_ MeetingID(主键)-公司名称-会议内容 1-A_公司-你好 2-A_公司-你好 3-B_公司-苹果 4-B_公司-香蕉 我想做的是得到一个没有重复的新表 表1除外 MeetingID(主键)-公司名称-会议内容 1-A_公司-你好 3-B_公司-苹果 4-B_公司-香蕉 我需要得到所有三列,但当我使用 SELECT DIS

我正在使用Microsoft SQL server management studio

我有一个有一些重复的表(除了主键,其他都是一样的)

例如:现在使用表_

  • MeetingID(主键)-公司名称-会议内容
  • 1-A_公司-你好
  • 2-A_公司-你好
  • 3-B_公司-苹果
  • 4-B_公司-香蕉
我想做的是得到一个没有重复的新表

表1除外

  • MeetingID(主键)-公司名称-会议内容
  • 1-A_公司-你好
  • 3-B_公司-苹果
  • 4-B_公司-香蕉
我需要得到所有三列,但当我使用

SELECT DISTINCT MeetingID, CompanyName, MeetingContent.....
它将得到相同的表,因为meetingID总是不同的。 我想买一件像这样的东西

SELECT MeetingID, DISTINCT CompanyName, MeetingContent  
但我不知道怎么做


谢谢。

根据您的样本数据,如果条目重复,您需要
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

简短回答:使用聚合和最小值

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

您可以按如下方式使用行号:

Select * from (
    Select *, RowN = Row_Number() over (partition by CompanyName, MeetingContent order by MeetingId) from yourtable ) a
    Where a.RowN = 1
Select top 1 with ties * from yourtable
    order by Row_Number() over (partition by CompanyName, MeetingContent order by MeetingId)
或者,您可以将top 1与领带一起使用,如下所示:

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

选择最小值(会议ID)、公司名称、会议内容。。。从按公司名称的表组中,MeetingContent…
尝试此链接,它显示了与示例相同的内容。我想创建以MeetingID作为主键的表,我使用“选择MIN(MeetingID)作为MeetingID,公司名称,MeetingContent From table\u现在按公司名称分组,MeetingContent”我尝试将meetingID设置为主键,但它不起作用。如何在将这些数据放入表的同时设置主键?Thank我想创建一个以MeetingID作为主键的表,我使用了“SelectMin(MeetingID)作为MeetingID,CompanyName,MeetingContent FROM table_now GROUP BY CompanyName,MeetingContent”并尝试将MeetingID设置为主键,但不起作用。如何在将这些数据放入表的同时设置主键?Thanks@travis我将创建表脚本添加到我的答案中。首先创建表,然后插入其中。您将使用底部查询,通过在插入/选择中省略
MeetingID
,它将为您自动增加标识列。我使用'select min(MeetingID)作为MeetingID,companyName,MeetingContent。。。从表组按公司名称,MeetingContent'但我不能将MeetingID更改为主键,我能做什么?谢谢