2017-07-25 1 views
1

Je rencontre des difficultés lorsque j'essaie d'exécuter le script ci-dessous. Erreur messsage:Comment corriger l'erreur dans ce script SQL (base de données utilisant Azure Datawarehouse)

Trier par clause non valide dans les vues et les fonctions en ligne

insert into cc.s 
(
    id, 
    encid, 
    a_name, 
    a_des, 
    a_type, 
    a_value, 
    d_create 
) 
select 
    id, 
    encid, 
    'days_charge', 
    'Days 43', 
    'int', 
    (
     select 
      datediff(day,t_dis,a.ts_it) 
     from 
      cc.enoun 
     where 
      encid <> a.encid 
      and id=a.pe_id 
      and a_source='tEst' 
      and a.ts_admit > t_dis 
     order by 
      tdischarge desc limit 1 
    ) as attr_value, 
    getdate() 
from 
    cc.s a 
GO 
+0

quel DB utilisez-vous/quel outil? Essayez de reformuler la question afin que les gens qui ne connaissent pas le contexte puissent comprendre – xhudik

+0

J'utilise Azure Datawarehouse, et j'utilise également l'outil SSMS pour éditer la requête –

Répondre

0

Dans votre script, vous essayez d'utiliser une instruction SELECT pour obtenir le a_value. Votre problème ici est que cette instruction select est votre fonction inline. Comme une fonction inline ne peut pas avoir une clause ORDER BY, il suffit de la supprimer.

insert into cc.s(id, encid, a_name, a_des, a_type, a_value, d_create) 
select id, encid,'days_charge','Days 43','int', 
(select datediff(day,t_dis,a.ts_it) from cc.enoun where encid<>a.encid and id=a.pe_id and a_source='tEst' and a.ts_admit>t_dis)   
as attr_value, 
getdate() 
from cc.s a 
GO 

Assurez-vous également que votre instruction inline renvoie uniquement 1 valeur. Puisque vous essayiez d'utiliser une clause ORDER BY, cela peut signifier qu'il renvoie plusieurs résultats.

+0

une fonction inline peut renvoyer plus d'une valeur –

+0

Non, elle ne le peut pas. Supposons que vous ayez une requête simple comme ceci: INSERT INTO table_1 VALUES (valeur1, valeur2, (SELECT a FROM table_2)) Si votre fonction inline (SELECT a FROM table_2) renvoie plusieurs valeurs, que faites-vous? Vous ne pouvez évidemment pas tous les ajouter en une seule entrée dans la base de données. Vous pouvez lire plus ici si vous voulez: [link] (https://www.tutorialspoint.com/sql/sql-sub-queries.htm) – Registeel1234