TSQL добавить все данные в первую строку, а затем половину данных после - PullRequest
0 голосов
/ 17 мая 2018

Привет всем, у меня есть таблица, что при выполнении запроса я получаю что-то вроде этого:

ID |The GUID                 |Quantity |Maint Part Number |Ship Group    |Date Received
-----------------------------------------------------------------------------------------
2  |54219-8974-8702-852-5425 |50       |54VRT             |ShipG105      |06/08/2018
3  |68v3f-5kjd-46ee-586-5988 |10       |M6eR5w            |ShipG001      |10/19/2010
4  |ErR20-bvmd-0001-bGT-0O0O |100      |MRE101            |ShipG99       |01/01/2011

Теперь я хочу сделать следующее:

ID |The GUID                 |Quantity |Maint Part Number |Ship Group    |Date Received
-----------------------------------------------------------------------------------------
2  |54219-8974-8702-852-5425 |50       |54VRT             |ShipG105      |06/08/2018
3  |                         |         |M6eR5w            |ShipG001      |10/19/2010
4  |                         |         |MRE101            |ShipG99       |01/01/2011

ВСЕ данные присутствуют в этой первой строке записи, в то время как следующие строки имеют только данные присоединения inv _... .

Я получаю все эти данные из многополюсных таблиц INNER JOIN , а также LEFT JOIN таблиц.

Пример запроса:

SELECT
   BL.ID                AS 'ID',
   BL.guid              AS 'The GUID',
   BL.qty               AS 'Quantity',
   I.inv_maintPartNum   AS 'Maint Part Number',
   I.inv_ShipGrp        AS 'Ship Group',
   I.inv_DateRec        AS 'Date Received' 
FROM 
   BizLine              AS BL 
INNER JOIN inventory    AS I 
   ON BL.ID = I.ID
..........

Как я могу это сделать?

UPDATE

Если у меня есть другие записи с другим ID, который выглядит следующим образом:

ID |The GUID                 |Quantity |Maint Part Number |Ship Group    |Date Received
-----------------------------------------------------------------------------------------
2  |54219-8974-8702-852-5425 |50       |54VRT             |ShipG105      |06/08/2018
2  |68v3f-5kjd-46ee-586-5988 |10       |M6eR5w            |ShipG001      |10/19/2010
2  |ErR20-bvmd-0001-bGT-0O0O |100      |MRE101            |ShipG99       |01/01/2011
3  |68rGw-3567-0001-123-fG34 |5        |GRD2859           |ShipG1        |11/11/2012
3  |5879R-376T-FDSW-RT7-23FG |1005     |Sv22              |ShipG87       |04/19/2017

А теперь, используя запрос из @SQLChao, это выглядит так:

2  |54219-8974-8702-852-5425 |50       |54VRT             |ShipG105      |06/08/2018
2  |                         |         |M6eR5w            |ShipG001      |10/19/2010
2  |                         |         |MRE101            |ShipG99       |01/01/2011
3  |                         |         |GRD2859           |ShipG1        |11/11/2012
3  |                         |         |Sv22              |ShipG87       |04/19/2017

Теперь это должно выглядеть так:

2  |54219-8974-8702-852-5425 |50       |54VRT             |ShipG105      |06/08/2018
2  |                         |         |M6eR5w            |ShipG001      |10/19/2010
2  |                         |         |MRE101            |ShipG99       |01/01/2011
3  |68rGw-3567-0001-123-fG34 |5        |GRD2859           |ShipG1        |11/11/2012
3  |                         |         |Sv22              |ShipG87       |04/19/2017

Обратите внимание, как ID 3 начинается со всех данных точно так же, как первые ID 2 , а затем показывает только другие данные.

Ответы [ 2 ]

0 голосов
/ 17 мая 2018

Попробуйте это

;With myData as
(
SELECT
   BL.ID                AS 'ID',
   BL.guid              AS 'The GUID',
   BL.qty               AS 'Quantity',
   I.inv_maintPartNum   AS 'Maint Part Number',
   I.inv_ShipGrp        AS 'Ship Group',
   I.inv_DateRec        AS 'Date Received',
   ROW_NUMBER() Over (Partition By BL.ID Order By BL.ID) RowNo

FROM 
   BizLine              AS BL 
INNER JOIN inventory    AS I 
   ON BL.ID = I.ID

)
Select ID, IIF(RowNo = 1, [The GUID], ' ')  [The GUID], IIF(RowNo = 1, [Quantity], ' ') Quantity, [Maint Part Number], [Ship Group], [Date Received]
From myData

Вам может потребоваться изменить функцию окна, чтобы определить запись, для которой вы хотите получить полные данные.

0 голосов
/ 17 мая 2018

Вы можете использовать ROW_NUMBER() и, если оно = 1, вернуть данные.Остальное оставь пустым.Я не совсем уверен, как вы упорядочиваете свои данные, поэтому я использовал BL.ID.При необходимости вы можете изменить его на что-то другое.

SELECT
   BL.ID                AS 'ID',
   CASE WHEN ROW_NUMBER() OVER (PARTITION BY BL.ID ORDER BY BL.ID ASC) = 1 THEN BL.guid ELSE '' END AS 'The GUID',
   CASE WHEN ROW_NUMBER() OVER (PARTITION By BL.ID ORDER BY BL.ID ASC) = 1 THEN BL.qty ELSE '' END AS 'Quantity',
   I.inv_maintPartNum   AS 'Maint Part Number',
   I.inv_ShipGrp        AS 'Ship Group',
   I.inv_DateRec        AS 'Date Received' 
FROM 
   BizLine              AS BL 
INNER JOIN inventory    AS I 
   ON BL.ID = I.ID
..........
...