首页 > 解决方案 > 如何通过从多个行项目之一中获取值来创建标题记录?

问题描述

我有一组已排序的行项目。它们首先按以下顺序ID排序Date

| ID  | DESCRIPTION |   Date   |
| --- | ----------- |----------|
| 100 | Red         |2019-01-01|
| 101 | White       |2019-01-01|
| 101 | White_v2    |2019-02-01|
| 102 | Red_Trim    |2019-01-15|
| 102 | White       |2019-01-16|
| 102 | Blue        |2019-01-20|
| 103 | Red_v3      |2019-01-14|
| 103 | Red_v3      |2019-03-14|

我需要在代表项目标题的 SQL Server 表中插入行,以便每个 ID 的第一行提供目标表中的Descriptionand Date。每个 ID 在目标表中应该只有一行。

例如,上面的源表会在目的地产生这个结果:

| ID  | DESCRIPTION |   Date   |
| --- | ----------- |----------|
| 100 | Red         |2019-01-01|
| 101 | White       |2019-01-01|
| 102 | Red_Trim    |2019-01-15|
| 103 | Red_v3      |2019-01-14|

如何折叠源,以便我只ID从源中获取每个源的第一行?

我更喜欢在 SSIS 中进行转换,但如有必要可以使用 SQL。实际上,这两种方法的解决方案都是最有帮助的。


这个问题与Trouble using ROW_NUMBER() OVER (PARTITION BY ...) 不同,因为它试图确定一种方法。该问题的提问者采用了一种方法,其中的答案不止一种。这个问题是关于如何使这种特定方法发挥作用。

标签: sqlsql-servertsqlssissql-server-data-tools

解决方案


相关的子查询将在这里有所帮助:

 SELECT *
 FROM yourtable t1
 WHERE [Date] = (SELECT min([Date]) FROM yourtable WHERE id = t1.id)

推荐阅读