Выберите строку данных на основе указанных c условий из других столбцов - PullRequest
2 голосов
/ 05 февраля 2020

У меня есть эти данные:

ID_OWN ID_PET KEY NAME
123    1      11  JOY
123    1      11  JOY
123    2      12  JOY
123    2      12  JOY
456    1      13  HELLO
456    1      13  MAMA
456    2      14  HELLO
456    2      14  MAMA

СЦЕНАРИЙ:

Если я выберу DISTINCT, ID_OWN 123 вернет 2 строки данных.

Но для ID_OWN 456 он по-прежнему будет возвращать 4 строки данных, поскольку столбец ИМЯ имеет все разные значения.

То, что я хочу, если NAME имеет разные значения под одним и тем же ID_OWN , тогда я хочу, чтобы эти значения NAME были соединены вместе, поэтому он также вернет 2 строки данных (или N строк данные основаны на № ID_PET под теми же ID_OWN , в данном случае они равны 1 и 2)

Ниже ожидаются возвращаемые данные:

ID_OWN ID_PET KEY NAME
123    1      11  JOY
123    2      12  JOY
456    1      13  HELLO MAMA
456    2      14  HELLO MAMA

Ответы [ 3 ]

0 голосов
/ 05 февраля 2020

В SQL Сервер, Вы можете достичь этого таким образом, демо на дб <> fiddle

;WITH cte_TempTable AS (
 SELECT DISTINCT ID_OWN, ID_PET, Key_Number, Name
 FROM TempTable
)
SELECT DISTINCT ID_OWN, ID_PET, Key_Number, SUBSTRING(
(
   SELECT ' ' + Name
   FROM cte_TempTable C1
   WHERE C1.ID_OWN = C2.ID_OWN AND C1.ID_PET = C2.ID_PET AND C1.Key_Number = C2.Key_Number
  FOR XML PATH ('')
), 2, 1000) AS "nAME"
FROM cte_TempTable C2

Вывод

ID_OWN  ID_PET  Key_Number  nAME
123        1    11          JOY
123        2    12          JOY
456        1    13          HELLO MAMA
456        2    14         HELLO MAMA
0 голосов
/ 05 февраля 2020

Если это MySQL, вы можете использовать GROUP_CONCAT, как показано ниже:

ДЕМО ЗДЕСЬ

SELECT ID_OWN,ID_PET,`Key`, group_CONCAT(NAME)
FROM  (
    SELECT DISTINCT ID_OWN,ID_PET,`Key`, NAME FROM your_table
)A
GROUP BY ID_OWN,ID_PET,`Key`
0 голосов
/ 05 февраля 2020

Используйте XML в комбинации с вещами

select distinct ID_OWN , ID_PET, [KEY],
STUFF((Select ' '+ NAME
from yourtable T1
where T1.ID_OWN =T2.ID_OWN and T1.ID_PET =T2.ID_PET  and T1.[KEY] =T2.[KEY] 
FOR XML PATH('')),1,1,'') as stickedName from yourtable  T2

Вывод:

ID_OWN  ID_PET  KEY stickedName
123     1       11  JOY
123     2       12  JOY
456     1       13  HELLO,MAMA
456     2       14  HELLO,MAMA

enter image description here

...