【问题标题】:sql query to get distinct rows in let table in simple two tablessql查询在简单的两个表中获取let表中的不同行
【发布时间】:2015-08-18 04:16:39
【问题描述】:
CREATE TABLE [dbo].[tbl_Travel](
    [TE_ID] [int] IDENTITY(1,1) NOT NULL,
    [TRAVEL_TYPE] [varchar](12) NULL,
    [TRAVEL_MODE] [varchar](35) NULL,
    [TRAVEL_CLASS] [nchar](10) NULL)

SET PRIMARY KEY TO TE_ID

INSERT INTO [TAMSMVC].[dbo].[tbl_Travel] VALUES  ('Return', 'Airlines', 'Economy')
INSERT INTO [TAMSMVC].[dbo].[tbl_Travel] VALUES  ('Single', 'Airlines', 'Business')
INSERT INTO [TAMSMVC].[dbo].[tbl_Travel] VALUES  ('Return', 'Airlines', 'Business')
INSERT INTO [TAMSMVC].[dbo].[tbl_Travel] VALUES  ('Single', 'Railway', 'Second')
INSERT INTO [TAMSMVC].[dbo].[tbl_Travel] VALUES  ('Return', 'Railway', 'First')


CREATE TABLE [dbo].[tbl_Journey](
    [JOURNET_ID] [int] IDENTITY(1,1) NOT NULL,
    [TE_ID] [int] NULL,
    [JOURNEY_FROM] [varchar](30) NULL,
    [JOURNEY_TO] [varchar](30) NULL)

将主键设置为 [JOURNET_ID]

INSERT INTO [TAMSMVC].[dbo].[tbl_Journey] VALUES (1,'Mumbai','PUNE')
INSERT INTO [TAMSMVC].[dbo].[tbl_Journey] VALUES (1,'PUNE','Mumbai')
INSERT INTO [TAMSMVC].[dbo].[tbl_Journey] VALUES (2,'BANGALORE','GOA')
INSERT INTO [TAMSMVC].[dbo].[tbl_Journey] VALUES (3,'CHENNAI','PANAJI')
INSERT INTO [TAMSMVC].[dbo].[tbl_Journey] VALUES (3,'PANAJI','CHENNAI')
INSERT INTO [TAMSMVC].[dbo].[tbl_Journey] VALUES (4,'DELHI','KOLKATA')
INSERT INTO [TAMSMVC].[dbo].[tbl_Journey] VALUES (5,'BHOPAL','SHIMALA')
INSERT INTO [TAMSMVC].[dbo].[tbl_Journey] VALUES (5,'SHIMALA','BHOPAL')

结果应该是我想要表中不同的行

Journey_ID  TE_ID   Journey_From    Journey_To  TRAVEL_TYPE [TRAVEL_MODE    TRAVEL_CLASS
  1          1       Mumbai          PUNE         Return      Airlines        Economy   
  3          2       BANGALORE       GOA          Single      Airlines         Business  
  4          3       CHENNAI        PANAJI        Return      Airlines         Business  
  6          4       DELHI          KOLKATA       Single      Railway          Second    
  7          5       BHOPAL         SHIMALA       Return      Railway          First     

结果应该是我想要表中的不同行我想删除第二个表中的重复行,并且它应该显示 min Journey_id 包含的行

【问题讨论】:

  • 提供您的查询,我们将对其进行修改。
  • 我假设您尝试将 JOURNEY_FROMJOURNEY_TO 分组为一次旅行,这就是您要删除一些行的原因

标签: sql sql-server tsql


【解决方案1】:
Journey_ID  TE_ID   Journey_From    Journey_To  TRAVEL_TYPE [TRAVEL_MODE    TRAVEL_CLASS    CountofTEID
1   1   Mumbai  PUNE        Return  Airlines    Economy     2
3   2   BANGALORE   GOA         Single  Airlines    Business    1
4   3   CHENNAI PANAJI      Return  Airlines    Business    2
6   4   DELHI   KOLKATA     Single  Railway Second      1
7   5   BHOPAL  SHIMALA     Return  Railway First       2
null    6   null    null    Return  Airlines    Economy     0
null    7   null    null    Return  Airlines    Business    0

在结果中我想要 Travel 表中的所有行,所有旅程的计数和具有最小旅程 ID 的单个记录

【讨论】:

    【解决方案2】:

    你知道,行

    插入 [TAMSMVC].[dbo].[tbl_Journey] 值 (1,'Mumbai','PUNE')

    插入 [TAMSMVC].[dbo].[tbl_Journey] 值 (1,'PUNE','Mumbai')

    不重复! 他们有不同的 ID (JOURNET_ID)

    但如果你真的想要它

      select a.JOURNET_ID, c.te_id, a.JOURNEY_FROM, a.JOURNEY_TO, c.TRAVEL_TYPE, c.TRAVEL_MODE, c.TRAVEL_CLASS ,
    (select count(1) from tbl_Journey where te_id=c.te_id)  CountofTEID
    from  tbl_Travel c left join tbl_Journey a on a.TE_ID=c.TE_ID 
    
    where JOURNET_ID is null or JOURNET_ID = 
    (
        select min(JOURNET_ID) from tbl_Journey b where 
        (a.JOURNEY_FROM=b.JOURNEY_FROM and a.JOURNEY_TO=b.JOURNEY_TO)
        or (a.JOURNEY_FROM=b.JOURNEY_TO and a.JOURNEY_TO=b.JOURNEY_FROM)
    )
    

    【讨论】:

    • 现在我希望旅程表中的行数具有相同的 te_id
    • 有什么用?你将如何使用它?您需要计算两地之间的旅行次数吗? +++ 改变你想要的输出
    • 结果我想要 Travel 表中的所有行、所有旅程的计数和具有最小旅程 ID 的单个记录
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-31
    • 1970-01-01
    • 1970-01-01
    • 2021-06-06
    • 2019-05-27
    相关资源
    最近更新 更多