【问题标题】:SQL Query Count and Label if firstSQL 查询计数和标签(如果是第一个)
【发布时间】:2013-03-12 19:10:01
【问题描述】:

我正在使用 SQL Server 管理 Studio 2010。

如果记录包含第一次出现的值,我需要我的查询来填充列。

我的查询返回的表很大,所以我将使用假列来表达我的观点。我的查询当前返回一个看起来像这样的表

| ROW | ItemNumber | DateOpen | Status |
|  1  |      10045 | 5/5/2005 |   Open |
|  2  |      10045 | 5/5/2005 |   Open |
|  3  |      10046 | 5/5/2005 |   Open |
|  4  |      10046 | 5/5/2005 |   Open |
|  5  |      10046 | 5/5/2005 |   Open |

我已经将行指示符添加到查询中,认为这将有助于识别第一次出现的 ItemNumber。如果记录是第一次出现,我需要有一个标记 X 的新列。

到目前为止我有这个

    DECLARE @ItemData Table(itemRow BIGINT, itemNumber BIGINT, DateOpen VARCHAR(15), status VARCHAR(15))
INSERT INTO @ItemData (itemRow, ItemNumber, DateOpen, Status)
SELECT Row_Number() OVER(ORDER BY Cm_ItemNumber) AS 'ROW'
       ,Cm_ItemNumber                            AS ItemNumber
       ,Dates_DateOpen                           AS DateOpen
       ,St_Status                                AS Status
FROM db_Items
JOIN db_Dates ON Dates_Item = Cm_ItemID
JOIN db_Status ON St_ID = Cm_StatusID
Select * from @ItemData

将其放入表中然后单独选择的原因是因为查询中实际上有一个联合和更多内容,当我意识到我需要做一个独特的检查器并将其添加到列中时,我想出了最简单的方法将是“事后”类型的东西,它将进入Select * from @ItemData 部分。

【问题讨论】:

  • 第一次出现是基于行还是打开日期?
  • 基于行号。我可能标记得不好。具体的行无关紧要,我只需要每个项目编号只标记一次,并认为通过行号添加不同的记录会更容易。

标签: sql count unique record


【解决方案1】:

我没有对此进行测试,但它与我将要玩的路线一致......
使用您现有的查询作为 2 个 CTE 中的第一个:

With AllData as
(
SELECT Row_Number() OVER(ORDER BY Cm_ItemNumber) AS 'ROW'
       ,Cm_ItemNumber                            AS ItemNumber
       ,Dates_DateOpen                           AS DateOpen
       ,St_Status                                AS Status
FROM db_Items
JOIN db_Dates ON Dates_Item = Cm_ItemID
JOIN db_Status ON St_ID = Cm_StatusID
),
FirstRows as
(
SELECT Min(ROW) as Row, ItemNumber
FROM AllData 
GROUP BY ItemNumber
)
SELECT
  ad.*,
  Case When fr.Row IS NULL then '' else 'X' end as X_Col
FROM AllData ad LEFT JOIN FirstRows fr 
  ON ad.ROW=fr.Row

【讨论】:

  • 如果我能弄清楚怎么做,我会批准您对Case When fr.row IS NULL then 的编辑:) 我似乎没有任何批准或拒绝点击!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-03-16
  • 1970-01-01
  • 1970-01-01
  • 2011-07-26
  • 2021-01-11
  • 2014-12-02
  • 1970-01-01
相关资源
最近更新 更多