2016-08-18 4 views
1

Ищу для запроса SQL Server, который может передать исходный SQL таблицы данных:SQL запрос для форматирования данных таблицы для DataSource в GridView

TextID | Text | LanguageID 
-------|-------|------------------------------------- 
app.aa | Hi | 6a13ea09-46ea-4c93-9b6a-e26bdc6ff4d8 
app.cc | Hund | 0c894bb7-4937-4903-906a-d1b1dd64935c 
app.aa | Hallo | 0c894bb7-4937-4903-906a-d1b1dd64935c 
app.cc | Dog | 6a13ea09-46ea-4c93-9b6a-e26bdc6ff4d8 
app.bb | Star | 6a13ea09-46ea-4c93-9b6a-e26bdc6ff4d8 
... 

в таблицу, как это:

TextID | Original | Translated 
-------|----------|----------- 
app.aa | Hi  | Hallo 
app.bb | Star  | - 
app.cc | Dog  | Hund 
... 

так что я могу использовать его как DataSource для GridView в ASP.NET. Спасибо заранее за вашу помощь.

ответ

0

Всякий раз, когда вам нужно объединить данные из двух разных строк в один, вам необходимо: присоединиться. Например:

select src.TextID "TextID", src.Text "Original", tr.Text "Translated" 
from source_table src 
left join source_table tr 
on src.TextID = tr.TextID 
and src.LangID = 'xxx' -- xxx is the source language id 
and tr.LangID = 'yyy' -- yyy is the target language id 

левое соединение гарантирует, что непереведенные слова включены с нулевым значением в переводе. Для того, чтобы сделать стол для вашего DataSource, вам нужно обернуть создать таблицу (или, возможно, создать вид) вокруг выберите:

create table translations as 
    select ... 
+0

Большое спасибо за вашу помощь. Запрос работает как шарм, но LEFT JOIN очень медленный, так как в базе данных много записей. Есть ли способ заменить его, например. с INNER JOIN или любой другой альтернативой, чтобы сделать это быстрее? – skullik

Смежные вопросы