【问题标题】:Avoid repeated values in a join避免连接中的重复值
【发布时间】:2016-10-06 08:52:16
【问题描述】:

我有两个表格 - 一个标题和一个矩阵/详细信息。

*标题表* *矩阵/详细信息表* +----+--------+-----+ +----+--------+------+ |身份证 |家长 |数量 | |身份证 |儿童 |数量 | +----+--------+-----+ +----+--------+------+ | 1 |一个 | 10 | | 1 | X | 100 | | 2 |乙| 20 | | 1 |是 | 1000 | | 3 | C | 30 | | 2 | X | 200 | +----+--------+-----+ | 2 |是 | 2000 | | 3 | X | 30 | | 3 |是 | 300 | | 3 | Z | 3000 | +----+--------+------+

我正在根据 ID 加入这两个表。

我不希望结果中包含头表中的重复值。 我希望得到如下结果:

*当前结果* *预期结果* +----+--------+-----+--------+------+ +----+-------- +-----+--------+------+ |身份证 |家长 |数量 |儿童 |数量 | |身份证 |家长 |数量 |儿童 |数量 | +----+--------+-----+--------+------+ +----+-------- +-----+--------+------+ | 1 |一个 | 10 | X | 100 | | 1 |一个 | 10 | X | 100 | | 1 |一个 | 10 |是 | 1000 | | | | |是 | 1000 | | 2 |乙| 20 | X | 200 | | 2 |乙| 20 | X | 200 | | 2 |乙| 20 |是 | 2000 | | | | |是 | 2000 | | 3 | C | 30 | X | 30 | | 3 | C | 30 | X | 30 | | 3 | C | 30 |是 | 300 | | | | |是 | 300 | | 3 | C | 30 | Z | 3000 | | | | | Z | 3000 | +----+--------+-----+--------+------+ +----+-------- +-----+--------+------+

这可能吗?如果没有,是否有替代解决方案?

提前谢谢...

【问题讨论】:

  • 您使用的是 MySQL 还是 MS SQL Server?使用 Oracle SQL Developer?
  • 标签很多,你用的是什么数据库?
  • 我正在使用 SQL Server。抱歉,我添加了所有 SQL 数据库名称。

标签: sql sql-server


【解决方案1】:

如果您使用的是SQL Server,请尝试以下查询。

;WITH CTE_1
AS
(SELECT *,ROW_NUMBER()OVER(PARTITION BY ID,Parent,Quantity ORDER BY ID ) RNO
FROM Header  H
JOIN [Matrix / Details] M
 ON H.ID=M.ID)

 SELECT CASE WHEN RNO=1 THEN CAST(ID as VARCHAR(50)) ELSE '' END  ID,
        CASE WHEN RNO=1 THEN Parent ELSE '' END  Parent,
        CASE WHEN RNO=1 THEN cast(Quantity as VARCHAR(50)) ELSE '' END  Quantity,
        Child,Qty
 FROM  CTE_1
 ORDER BY ID,Parent,Quantity

【讨论】:

  • 按1、2、3添加顺序
  • @Esperento57 是的.. 包括在内。
猜你喜欢
  • 2013-06-30
  • 2013-12-18
  • 2016-12-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-16
  • 1970-01-01
  • 2015-12-06
  • 1970-01-01
相关资源
最近更新 更多