2014-07-24 3 views
0

У меня есть следующий SQL скрипт сервера:Выберите столбец не входит в группу по

SELECT 
    cicmpy.cmp_name as Naam 
    ,c2.cmp_name as Arts 
    ,cicmpy.textfield1 as Voornaam 
    ,items.UserField_02 as Label 
    ,absences.HID 
FROM 
    Absences 
INNER JOIN 
    cicmpy ON Absences.CustomerID = cicmpy.cmp_wwn 
INNER JOIN 
    cicmpy as c2 ON Absences.FreeGuidField_01 = c2.cmp_wwn 
INNER JOIN 
    Items ON absences.ItemCode = items.ItemCode 
WHERE 
    Absences.Type = 86 

мне нужно все столбцы я имею в SELECT заявление, но только уникальные. Как бы то ни было, столбец HID является уникальным столбцом, поэтому группировка на нем возвращает все строки. Я попытался достичь своей цели с CTE, но не смог. Как я могу получить все уникальные записи на основе столбцов, кроме столбца HID?

+2

Вы просто хотите отличать эти столбцы? – Cheruvian

+0

Почему вы также хотите вернуть HID? Какой HID вы хотите вернуть? В одной группе может быть несколько HID. – JodyT

+1

Можете ли вы дать нам небольшую пробную информацию и ваш желаемый результат? Похоже, вам просто нужно использовать 'select distinct ...'. – Andrew

ответ

0

Надеюсь, это то, что вы ищете:

;WITH cte AS 
(
SELECT 

cicmpy.cmp_name as Naam 
,c2.cmp_name as Arts 
    ,cicmpy.textfield1 as Voornaam 
    ,items.UserField_02 as Label 
    ,absences.HID 
    ,ROW_NUMBER() OVER (PARTITION BY cicmpy.cmp_name, c2.cmp_name, cicmpy.textfield1, items.UserField_02 ORDER BY absences.HID DESC) AS rn 
FROM 
    Absences 
    INNER JOIN cicmpy 
    ON Absences.CustomerID = cicmpy.cmp_wwn 
inner join cicmpy as c2 
on Absences.FreeGuidField_01 = c2.cmp_wwn 
inner join Items 
on absences.ItemCode = items.ItemCode 
where Absences.Type = 86 
) 
SELECT * 
FROM cte 
WHERE rn = 1 
1

Использование SELECT DISTINCT

SELECT DISTINCT 
cicmpy.cmp_name as Naam 
,c2.cmp_name as Arts 
    ,cicmpy.textfield1 as Voornaam 
    ,items.UserField_02 as Label 
FROM Absences 
    INNER JOIN cicmpy 
    ON Absences.CustomerID = cicmpy.cmp_wwn 
inner join cicmpy as c2 
    on Absences.FreeGuidField_01 = c2.cmp_wwn 
inner join Items 
    on absences.ItemCode = items.ItemCode 
where Absences.Type = 86 

ИЛИ

если Вы желаете некоторые HID, вам нужно будет выбрать тип агрегации вы будете использовать (MIN или MAX)

SELECT 
    cicmpy.cmp_name as Naam 
    ,c2.cmp_name as Arts 
    ,cicmpy.textfield1 as Voornaam 
    ,items.UserField_02 as Label 
    , MAX(Absences.HID) as MAX_HID 
    , MIN(Absences.HID) as MIN_HID 
FROM Absences 
    INNER JOIN cicmpy 
    ON Absences.CustomerID = cicmpy.cmp_wwn 
inner join cicmpy as c2 
    on Absences.FreeGuidField_01 = c2.cmp_wwn 
inner join Items 
    on absences.ItemCode = items.ItemCode 
where Absences.Type = 86 
GROUP BY 
    cicmpy.cmp_name 
    ,c2.cmp_name 
    ,cicmpy.textfield1 
    ,items.UserField_02 
Смежные вопросы