【问题标题】:Determine if row from a join is odd or even in SQL Server确定连接中的行在 SQL Server 中是奇数还是偶数
【发布时间】:2011-08-17 20:01:37
【问题描述】:

我有一个查询,它返回每个国家/地区的一行数据以及其他相关信息。查询(删除了所有不相关的内容)如下所示:

SELECT a.*, ROW_NUMBER() OVER(ORDER BY a.DateSubmitted) As RowNumber, c.CountryName FROM     Table1 a
inner join Table2 b
on a.id = b.id
inner join Table3 c on c.countrycode = b.countrycode

这样返回每一行的行号:

    ID  User        Country     RowNumber
    8   testtest    BANGLADESH  1
    14  testtest    ANGOLA      2
    14  testtest    AUSTRALIA   3
    14  testtest    BANGLADESH  4
    15  testera1    BELIZE      5
    15  testera1    CONGO       6

但是,我需要为每个唯一的 ID 返回一个 0 或 1,而不是为我已经拥有的主语句中的每一行返回一个 0 或 1。所以我想要的是以下内容:

    ID  User        Country     RowNumber
    8   testtest    BANGLADESH  0
    14  testtest    ANGOLA      1
    14  testtest    AUSTRALIA   1
    14  testtest    BANGLADESH  1
    15  testera1    BELIZE      0
    15  testera1    CONGO       0

我的 SQL 很弱,我终于有意识地尝试改进它,非常感谢你的帮助。

【问题讨论】:

  • 你想要的输出没有意义。你能解释一下吗?
  • 据我所知,他希望为每个不同的 id 交替 0,1,0,1,0,1...
  • 好的,也许 RowNumber 的列标题不清楚,因为这不是我真正想要的。我要做的是根据父记录而不是 Country 或 RowNumber 在报告上交替行颜色。所以我需要一个在报告中触发的指标,但我需要它为每个新的 ID 行在 0 和 1 之间切换。
  • 是的,Dems,一个更简洁的解释:)
  • UGGGGGGGGGGGGGGH. 不要将格式化的东西放在 SQL 中。如果您想要交替颜色在您的报告中这样做。

标签: sql sql-server-2005 sql-server-2008 join


【解决方案1】:

DENSE_RANK() 可用于为每个id 赋予不同的值,但相同id 的所有出现都具有相同的值。对任意号码执行% 2,您会得到01...

SELECT
  a.*,
  c.CountryName
  ROW_NUMBER() OVER(ORDER BY a.DateSubmitted)  As RowNumber,
  (DENSE_RANK() OVER (ORDER BY a.ID) - 1) % 2  As StrangeBinaryFlag
FROM
  Table1 a
INNER JOIN
  Table2 b
    ON a.id = b.id
INNER JOIN
  Table3 c
    ON c.countrycode = b.countrycode

【讨论】:

  • 是的,他使用a.* 很聪明,但他的输出中没有DateSubmitted。我只是忽略了这一点,并举了一个例子,在不同的 id 中给出 0,1,0,1,0。模糊地希望这就是他的意思。如果没有,我不会有任何损失:)
  • 可能需要在一个或两个子句中使用PARTITION BY ID [未经测试]。
  • +1 尝试然后我猜。我认为这是一个 GIGO 问题。
  • 抱歉,DateSubmitted 是“a”表的成员,我只是想浓缩我必须发布的内容。我现在将研究 DENSE_RANK()。感谢并为我非常混乱的解释感到抱歉。
  • Garbage In, Garbage Out 并且你没有啤酒,只是一个复选标记,因为它像冠军一样工作!非常感谢:)
【解决方案2】:

遵循最佳编程实践,让您和他人的生活更轻松:

与其在查询中返回格式信息,不如弄清楚当显示工具中的键发生变化时如何改变行颜色。它就是为此而构建的,它将比 SQL 更轻松、更优雅地完成这项工作。

【讨论】:

  • 我同意,如果允许您使用能够让您做您需要做的事情的报告工具,您可以这样做,否则,您需要寻找替代方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-16
相关资源
最近更新 更多