Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Join с выбором из нескольких значений  [new]
davPak
Member

Откуда:
Сообщений: 2
здравствуйте я начинающий в SQL сервере.
У меня есть таблица с работниками надо чтобы имя и фамилия были на разных языках.
я создал таблицу работник со всеми данными работника а имя и фамилия в отдельном таблице и номером языка

CREATE TABLE [dbo].[Employee](
	[EmployeeID] [int] IDENTITY(1,1) NOT NULL,
	[BirthDate] [datetime] NULL,
	[MobileNumber] [nvarchar](50) NULL,
	[PassportSN] [nvarchar](50) NULL,
	[CreatedDate] [datetime] NOT NULL)


CREATE TABLE [dbo].[EmployeeLang](
	[EmployeeLangID] [int] IDENTITY(1,1) NOT NULL,
	[EmployeeID] [int] NOT NULL,
	[LangValue] [int] NOT NULL,
	[FirstName] [nvarchar](256) NULL,
	[LastName] [nvarchar](256) NULL)


конечно я связал оба таблицы первичным ключом EmployeeID

мне нужно возвращать всех работников допустим по языку LangValue=2, но если у работника нет имени и фамилии по этому языку , возвращать имя и фамилия этого работника по дефолту например LangValue=1,
по моей логике нужно связать оба таблицы но я не могу понять как проверить и возвращать имя и фамилия по дефолт LangValue=1

ALTER PROCEDURE [dbo].[GetEmployees](
	@Lang int=1)
AS
BEGIN
	SET NOCOUNT ON;
	SELECT E.EmployeeID,E.[MobileNumber],L.[FirstName],L.[LastName]
	From [dbo].[Employee] AS E
	JOIN [dbo].[EmployeeLang] as L
	ON ( L.[EmployeeID]=E.[EmployeeID] AND (L.LangValue=@Lang OR L.LangValue=1) )
END

возврашает на всех языках
Please help...
14 июл 13, 19:19    [14563808]     Ответить | Цитировать Сообщить модератору
 Re: Join с выбором из нескольких значений  [new]
qwerty112
Guest
	SELECT E.EmployeeID,E.[MobileNumber],L.[FirstName],L.[LastName]
	From [dbo].[Employee] AS E
	JOIN [dbo].[EmployeeLang] as L
	ON  L.[EmployeeID]=E.[EmployeeID] 
where L.LangValue=@Lang 
OR (L.LangValue=1 and not exists(select 1 from [dbo].[EmployeeLang] L1 where L.[EmployeeID]=L1.[EmployeeID] and L.LangValue=@Lang)) 
14 июл 13, 19:24    [14563817]     Ответить | Цитировать Сообщить модератору
 Re: Join с выбором из нескольких значений  [new]
qwerty112
Guest
fix
qwerty112
	SELECT E.EmployeeID,E.[MobileNumber],L.[FirstName],L.[LastName]
	From [dbo].[Employee] AS E
	JOIN [dbo].[EmployeeLang] as L
	ON  L.[EmployeeID]=E.[EmployeeID] 
where L.LangValue=@Lang 
OR (L.LangValue=1 and not exists(select 1 from [dbo].[EmployeeLang] L1 where L.[EmployeeID]=L1.[EmployeeID] and L1.LangValue=@Lang)) 
14 июл 13, 19:26    [14563821]     Ответить | Цитировать Сообщить модератору
 Re: Join с выбором из нескольких значений  [new]
serpentariy
Member

Откуда:
Сообщений: 265
davPak,
SELECT E.EmployeeID,E.[MobileNumber],ISNULL(L2.[FirstName],L1.[FirstName]),ISNULL(L2.[LastName],L1.[LastName])
From [dbo].[Employee] AS E
JOIN [dbo].[EmployeeLang] as L1 ON ( L1.[EmployeeID]=E.[EmployeeID] AND (L1.LangValue=1) )
LEFT JOIN [dbo].[EmployeeLang] as L2 ON ( L2.[EmployeeID]=E.[EmployeeID] AND (L2.LangValue=@Lan) )
14 июл 13, 19:28    [14563828]     Ответить | Цитировать Сообщить модератору
 Re: Join с выбором из нескольких значений  [new]
davPak
Member

Откуда:
Сообщений: 2
спасибо qwerty112 и serpentariy мне понравились оба варианта

дело в том что у меня есть еще поля в работниках, LocationID по которым я должен в таблице Location по тому же принципу найти язык в таблице LoacationLang, это не вызовет проблем
спасибо
14 июл 13, 19:48    [14563872]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить