2016-10-14 3 views
1

Ich habe Schwierigkeiten mit dem Schlüsselwort UNION in meiner SQL Anfrage, Ich brauche mein Ergebnis von Spalte zu sortieren, die nicht von einer SELECT angezeigt wird,ORDER BY, SELECT mit UNION Art Schwierigkeit

DECLARE @search0 varchar(30); 

SET @search0 = 'joll' 


SELECT c.CdCnd AS n, FORMAT(c.ModifieLe, 'd', 'fr-FR') AS Modifié, c.Nom+' '+c.prenom AS 'Nom Complet', c.TelMobile AS 'Tel. Mob', c.SuiviPar AS 'Suivi par', a.LibAction AS 'à faire', c.Remuneration AS Rémunération, p.LibPrio AS Priorité, c.disponibilite AS Disponibilité, c.MotCleTech AS MCTech, c.MotCleFct AS MCFonc, c.MotCleEnt AS MCEnt, c.Details AS 'Détails', c.DateDispo AS DTDispo, c.Mobilite AS Mobilité 
FROM Candidat c 
LEFT JOIN TypAction a 
    ON c.CdAction = a.CdAction 
LEFT JOIN TypPriorite p 
    ON c.CdPrio = p.CdPrio 
WHERE ( (Nom LIKE '%' + @search0 + '%' COLLATE SQL_Latin1_General_Cp437_CI_AI OR prenom LIKE '%' + @search0 + '%' COLLATE SQL_Latin1_General_Cp437_CI_AI OR MotCleTech LIKE '%' + @search0 + '%' COLLATE SQL_Latin1_General_Cp437_CI_AI OR MotCleFct LIKE '%' + @search0 + '%' COLLATE SQL_Latin1_General_Cp437_CI_AI OR MotCleEnt LIKE '%' + @search0 + '%' COLLATE SQL_Latin1_General_Cp437_CI_AI ) ) 

    UNION 

SELECT c.CdCnd AS n, FORMAT(c.ModifieLe, 'd', 'fr-FR') AS Modifié, c.Nom+' '+c.prenom AS 'Nom Complet', c.TelMobile AS 'Tel. Mob', c.SuiviPar AS 'Suivi par', a.LibAction AS 'à faire', c.Remuneration AS Rémunération, p.LibPrio AS Priorité, c.disponibilite AS Disponibilité, c.MotCleTech AS MCTech, c.MotCleFct AS MCFonc, c.MotCleEnt AS MCEnt, c.Details AS 'Détails', c.DateDispo AS DTDispo, c.Mobilite AS Mobilité 
FROM Candidat c 
LEFT JOIN TypAction a 
    ON c.CdAction = a.CdAction 
LEFT JOIN TypPriorite p 
    ON c.CdPrio = p.CdPrio 
WHERE (1 = 2 OR c.CdCnd = '3' OR c.CdCnd = '48' OR c.CdCnd = '16') 

ORDER BY Modifié DESC 

Hier i Ich muss mein gesamtes Ergebnis nach DateTime mit der Spalte c.ModifieLe, sortieren Aber mit der UNION-Einschränkung kann ich diese Spalte verwenden, ohne sie anzuzeigen, und ich muss mein Datum in 'fr-FR' formatieren,

Also verwende ich "Modifié", um mein Ergebnis zu sortieren, aber diese Art wie ein Varchar-Typ ...

Ich muss meine DateTime in französischer Kultur FORMATIEREN und es auf Date Type halten.

Danke für alle Hilfe.

Antwort

2

Erste UNION anwenden und sie bis dahin sortieren:

;WITH T AS 
(
    SELECT 
     c.CdCnd AS n, 
     c.ModifieLe, 
     c.Nom+' '+c.prenom AS 'Nom Complet', 
     c.TelMobile AS 'Tel. Mob', 
     c.SuiviPar AS 'Suivi par', 
     a.LibAction AS 'à faire', 
     c.Remuneration AS Rémunération, 
     p.LibPrio AS Priorité, 
     c.disponibilite AS Disponibilité, 
     c.MotCleTech AS MCTech, 
     c.MotCleFct AS MCFonc, 
     c.MotCleEnt AS MCEnt, 
     c.Details AS 'Détails', 
     c.DateDispo AS DTDispo, 
     c.Mobilite AS Mobilité 
    FROM Candidat c 
    LEFT JOIN TypAction a 
     ON c.CdAction = a.CdAction 
    LEFT JOIN TypPriorite p 
     ON c.CdPrio = p.CdPrio 
    WHERE ( (Nom LIKE '%' + @search0 + '%' COLLATE SQL_Latin1_General_Cp437_CI_AI OR prenom LIKE '%' + @search0 + '%' COLLATE SQL_Latin1_General_Cp437_CI_AI OR MotCleTech LIKE '%' + @search0 + '%' COLLATE SQL_Latin1_General_Cp437_CI_AI OR MotCleFct LIKE '%' + @search0 + '%' COLLATE SQL_Latin1_General_Cp437_CI_AI OR MotCleEnt LIKE '%' + @search0 + '%' COLLATE SQL_Latin1_General_Cp437_CI_AI ) ) 

    UNION 

    SELECT 
     c.CdCnd AS n, 
     c.ModifieLe, 
     c.Nom+' '+c.prenom AS 'Nom Complet', 
     c.TelMobile AS 'Tel. Mob', 
     c.SuiviPar AS 'Suivi par', 
     a.LibAction AS 'à faire', 
     c.Remuneration AS Rémunération, 
     p.LibPrio AS Priorité, 
     c.disponibilite AS Disponibilité, 
     c.MotCleTech AS MCTech, 
     c.MotCleFct AS MCFonc, 
     c.MotCleEnt AS MCEnt, 
     c.Details AS 'Détails', 
     c.DateDispo AS DTDispo, 
     c.Mobilite AS Mobilité 
    FROM Candidat c 
    LEFT JOIN TypAction a 
     ON c.CdAction = a.CdAction 
    LEFT JOIN TypPriorite p 
     ON c.CdPrio = p.CdPrio 
    WHERE (1 = 2 OR c.CdCnd = '3' OR c.CdCnd = '48' OR c.CdCnd = '16') 
) 
SELECT 
    [n],  
    FORMAT([ModifieLe], 'd', 'fr-FR') AS Modifié, 
    [Nom Complet], 
    [Tel. Mob], 
    [Suivi par], 
    [à faire], 
    [Rémunération], 
    [Priorité], 
    [Disponibilité], 
    [MCTech], 
    [MCFonc], 
    [MCEnt], 
    [Détails], 
    [DTDispo], 
    [Mobilité] 
FROM T ORDER BY CAST(ModifieLe AS DATETIME) DESC 
2

Ihre Bestellung sollte

sein
ORDER BY CONVERT(DATETIME,Modifié,103) DESC 
+2

Ich stimme zu, mit einer Randnotiz, dass dies ein bisschen mehr Arbeit verursacht: zuerst formatieren und dann Parsen, was gerade formatiert wurde. Wenn das Probleme verursacht, sollte die UNION zuerst ohne Formatierung mit einer Unterabfrage sortiert werden, und danach kann das FORMAT auf dem Ergebnis davon ausgeführt werden. –

0

Sie können versuchen, wie

select * from(
SELECT c.CdCnd AS n, FORMAT(c.ModifieLe, 'd', 'fr-FR') AS Modifié, c.Nom+' '+c.prenom AS 'Nom Complet', c.TelMobile AS 'Tel. Mob', c.SuiviPar AS 'Suivi par', a.LibAction AS 'à faire', c.Remuneration AS Rémunération, p.LibPrio AS Priorité, c.disponibilite AS Disponibilité, c.MotCleTech AS MCTech, c.MotCleFct AS MCFonc, c.MotCleEnt AS MCEnt, c.Details AS 'Détails', c.DateDispo AS DTDispo, c.Mobilite AS Mobilité 
FROM Candidat c 
LEFT JOIN TypAction a 
    ON c.CdAction = a.CdAction 
LEFT JOIN TypPriorite p 
    ON c.CdPrio = p.CdPrio 
WHERE ( (Nom LIKE '%%' COLLATE SQL_Latin1_General_Cp437_CI_AI OR prenom LIKE '%%' COLLATE SQL_Latin1_General_Cp437_CI_AI OR MotCleTech LIKE '%' + @search0 + '%' COLLATE SQL_Latin1_General_Cp437_CI_AI OR MotCleFct LIKE '%' + @search0 + '%' COLLATE SQL_Latin1_General_Cp437_CI_AI OR MotCleEnt LIKE '%' + @search0 + '%' COLLATE SQL_Latin1_General_Cp437_CI_AI ) ) 

    UNION 

SELECT c.CdCnd AS n, FORMAT(c.ModifieLe, 'd', 'fr-FR') AS Modifié, c.Nom+' '+c.prenom AS 'Nom Complet', c.TelMobile AS 'Tel. Mob', c.SuiviPar AS 'Suivi par', a.LibAction AS 'à faire', c.Remuneration AS Rémunération, p.LibPrio AS Priorité, c.disponibilite AS Disponibilité, c.MotCleTech AS MCTech, c.MotCleFct AS MCFonc, c.MotCleEnt AS MCEnt, c.Details AS 'Détails', c.DateDispo AS DTDispo, c.Mobilite AS Mobilité 
FROM Candidat c 
LEFT JOIN TypAction a 
    ON c.CdAction = a.CdAction 
LEFT JOIN TypPriorite p 
    ON c.CdPrio = p.CdPrio 
WHERE (1 = 2 OR c.CdCnd = '3' OR c.CdCnd = '48' OR c.CdCnd = '16') 
) 
ORDER BY Modifié DESC 
0

Sie mögen diese {SET DATEFORMAT { format_column | varchar_column }} einstellen können und zum Sortieren können Sie die Klausel hazing in der where-Bedingung verwenden. Anstelle von UNION können Sie OR-Bedingung in der WHERE-Klausel in der ersten Abfrage verwenden.