0

私が使用しているクエリは次のとおりです。

select top 1 'Return To IPACS' as name, 'http://domain:88' as link 
union 
select name,link 
from jrm_intranetlinks l 
inner join jrm_intranetpermissions p on l.id = p.linkid 
where p.userid = 155
order by case name when 'Home' then 2 when 'Team' then 1 end desc, name

これが私が受け取っているエラーメッセージです:

Msg 104, Level 16, State 1, Line 1
ORDER BY items must appear in the select list if the statement contains a UNION, INTERSECT or EXCEPT operator.

上記の一番下のセットは、リンク名に使用するリストを返し、右側の列はリンク先のパスを提供します。全員にデフォルトのリンクを追加する必要があるため、ユニオン部分を試しています。このリンクは全員が取得し、他のテーブルには許可に基づいてリンクが表示されるためです。

order by 句がなくても問題なく動作しますが、一番上にある ipacs に戻り、次にホーム、次にチーム、そして残りの順序付けられた降順が必要です。

ここで何が間違っていますか?

4

6 に答える 6

2

どうですか:

select 
    'Return To IPACS' as name, 
    'http://domain:88' as link, 
    1 as sort_me 
union all
(select 
    name, 
    link, 
    2 as sort_me 
from jrm_intranetlinks l 
inner join jrm_intranetpermissions p on l.id = p.linkid 
where p.userid = 155 )
order by sort_me

あなたの巣立ちが心配です。括弧を追加しました。とにかく、ソートを強制するには、示されているように値を追加するだけでよいということです。

于 2013-07-02T21:49:24.530 に答える
2
select 
    'Return To IPACS' as name, 
    'www.home.com' as link,
    3 sortOrder
union all
select 
    name, 
    link,
    case name 
        when 'Home' then 2 
        when 'Team' then 1 
    end sortOrder
from links l
inner join jrm_intranetpermissions p on l.id = p.linkid 
where p.userid = 155 
order by sortOrder desc

デモ

于 2013-07-02T22:06:18.030 に答える
1

あなたが持っているのは2つの異なる「列」です...

l.[Name] 

(case [Name] when 'Home' then 2 when 'Team' then 1 end)

...前者は選択リストにあり、後者はそうではありません。

いくつかの回避策があります。私のお気に入りは...

select top 1 'Return To IPACS' as [Name]
    ,'http://domain:88' as [Link]
    , 3 as [Order]

union 

select l.name as [Name]
    ,l.link as [Link]
    ,(case [Name] when 'Home' then 2 when 'Team' then 1 end) as [Order]
from jrm_intranetlinks l
inner join jrm_intranetpermissions p on l.id = p.linkid 
where p.userid = 155
order by [Order], [Name]
于 2013-07-02T22:14:06.510 に答える
0
select name,link from (
  select
    'Return To IPACS' as name,
    'http://domain:88' as link,
    0 as sort_order
  union 
  select
    name,
    link
    case name when 'Home' then 1 when 'Team' then 2 as sort_order
  from jrm_intranetlinks l 
  inner join jrm_intranetpermissions p on l.id = p.linkid 
  where p.userid = 155
) t
order by sort_order, name
于 2013-07-02T22:03:37.993 に答える
0

「名前」と「リンク」のみを選択しているためORDER BYUNIONINTERSECT、またはEXPECT.

order byつまり、' ' 句のすべての項目を select ステートメントに追加する必要があります。

于 2013-07-02T21:49:57.870 に答える
0

内部クエリにして、外部で順序を指定してみましたか?

このようなもの:

select name, link
from (
    select top 1 'Return To IPACS' as name, 'http://domain:88' as link 
    union 
    select name,link 
    from jrm_intranetlinks l 
    inner join jrm_intranetpermissions p on l.id = p.linkid 
    where p.userid = 155
) tbl
order by case name when 'Home' then 2 when 'Team' then 1 end desc, name
于 2013-07-02T21:53:20.803 に答える