2016-05-30 12 views
0

カラム内の特定の項目の出力を置き換えて短縮します(つまり、Info Session to Info Session)。現行のSQLでは、replace関数は文が私たちの環境内で実行できるようには見えません。間違いなく、私はreplace関数を使うのが初めてで、正しい方法で使用されているかどうかはわかりません。お知らせ下さい!エイリアスを使用したSQLの置換

select [Date], [Time], [Event], [Students], [Guests] 
from (
select 
    e.[id], 
    format(e.[date], 'h:mm tt') as [Time], 
    e.[date], 
    replace('Information Session','Information','Info') e.[summary] as [Event], 
    (
    select count(*) 
    from [event.registration] 
    where [event] = e.[id] and [cancelled] is null 
    ) as [Students], 
    (
    select sum([guests]) 
    from [event.registration] 
    where [event] = e.[id] and [cancelled] is null 
) as [Guests] 
from [event] e 
where e.[category] 
in ('Campus Visit', 'Information Session', 'Campus Tour', 'Athletics and Wellness Tour') and format(e.[date], 'MM/dd/yyyy') = format(getdate(), 'MM/dd/yyyy') 

) base 
order by [Time] asc 
+0

'replace( 'Information Session'、 'Information'、 'Info')e。[summary]'はあなたの望む結果を全く説明していないので、何をしたいですか? – Lamak

+0

今すぐ出力「情報セッション」が表示されたら、「情報セッション」に短縮して – user3490756

+5

を表示したい場合は、 'REPLACE(例:[概要]、 '情報'、 '情報')を使用してください。 – Lamak

答えて

0

クエリ全体が少し奇妙に見えます。あなたが戻ってくる行のために、登録テーブル、カウント(*)と合計(ゲスト)に向かって2つの余分なquerysを行います。

これは問題ではないかもしれませんが、大きなテーブルではパフォーマンスの問題や可能なテーブルロックが発生します。

私は少し似て、それを片付け示唆

SELECT 
    e.[date], 
    FORMAT(e.[date], 'h:mm tt') AS [Time], 
    REPLACE(e.[category],'Information','Info') AS [Event], 
    COUNT(er.id) as [Students], 
    SUM(er.[guests]) 
FROM [event] e 
LEFT JOIN [event.registration] er 
ON er.[event] = e.[id] AND [cancelled] IS NOT NULL 
WHERE 
    e.[category] IN ('Campus Visit', 'Information Session', 'Campus Tour', 'Athletics and Wellness Tour') 
    AND DATEDIFF(DAY,e.[date], GETDATE())=0 

ORDER BY [Time] ASC 

を、私はまた、あなたのWHERE形式(。E [日付]、 'MM/DD/YYYY')を置き換え...以下の操作のためのDateDiff関数にクエリ内にあります。

これにはいくつかのエラーがあるかもしれませんが、私はあなたのテーブル定義にアクセスすることができないので、テストするのは難しいです。

+0

提案をありがとう! – user3490756

関連する問題