2016-12-10 5 views
0
SocialStatus 
╔═════════════════════════════════════════════════════════════════╗ 
║ SocialStatusId | SocialTypeId | ResidentId | Details | IsActive ║ 
╠═════════════════════════════════════════════════════════════════╣ 
║  16  |  5  |  2  | Sample |  1 ║ 
║  17  |  6  |  4  | kgfhkhgf|  0 ║ 
║  18  |  8  |  2  | NULL |  1 ║ 
║  19  |  8  |  6  | NULL |  0 ║ 
║  21  |  5  |  8  | asdasd |  1 ║ 
║  22  |  5  |  3  | adasd |  0 ║ 
╚═════════════════════════════════════════════════════════════════╝ 

Resident 
╔════════════╦═══════════╦════════════╦══════════╦════════════╦═════════╦══════════╦═══════════════╦═══════════════╦══════════╦══════════╗ 
║ ResidentId ║ FirstName ║ MiddleName ║ LastName ║ Birthdate ║ Address ║ GenderId ║ ContactNumber ║ IsNonResident ║ IsActive ║ StreetId ║ 
╠════════════╬═══════════╬════════════╬══════════╬════════════╬═════════╬══════════╬═══════════════╬═══════════════╬══════════╬══════════╣ 
║   8 ║ Jonathan ║ Santos  ║ Guinto ║ 2016-11-17 ║ Sample ║  1 ║ 09107435739 ║    0 ║  1 ║ NULL  ║ 
╚════════════╩═══════════╩════════════╩══════════╩════════════╩═════════╩══════════╩═══════════════╩═══════════════╩══════════╩══════════╝ 

SocialType 
╔══════════════╦════════════════════════╦═════════════╦══════════╗ 
║ SocialTypeId ║  SocialName  ║ Description ║ IsActive ║ 
╠══════════════╬════════════════════════╬═════════════╬══════════╣ 
║   1 ║ Sample     ║ Sample0001 ║  0 ║ 
║   2 ║ Sample2    ║ Sample222 ║  0 ║ 
║   3 ║ Sample3    ║ Sample3123 ║  0 ║ 
║   4 ║ Sample4    ║ Sample4  ║  0 ║ 
║   5 ║ Person with disability ║ Happy  ║  1 ║ 
║   6 ║ Señior Citizen   ║ Sample  ║  1 ║ 
║   7 ║ Unemployed    ║ sample  ║  1 ║ 
║   8 ║ Indigence    ║ sample  ║  1 ║ 
║   9 ║ Rowllens    ║ asdasdasd ║  0 ║ 
║   10 ║      ║    ║  0 ║ 
╚══════════════╩════════════════════════╩═════════════╩══════════╝ 

Сверху днище являетсяSQL присоединяется не выходит

  • SocialStatus
  • Resident
  • SocialType

то, что я хочу сделать, это присоединиться к SocialType и SocialStatus таблицу затем фильтр, если у Resident это значение, то есть Señior Citizen, тогда бит столбца присваивается правда, чтобы проиллюстрировать более см таблицу вывода

Мой запрос

SELECT 
    st.SocialTypeId, 
    st.SocialName, 
    CASE WHEN ss.SocialStatusId IS NULL THEN CAST(1 AS bit) ELSE CAST(0 AS bit) END AS IsAssign 
FROM dbo.SocialType st 
LEFT JOIN dbo.SocialStatus ss ON st.SocialTypeId = ss.SocialTypeId 
WHERE ss.IsActive = 1 AND ss.ResidentId = 8 

это возвращение запрос только один столбец SocialType таблица выход

╔══════════════╦════════════════════════╦══════════╗ 
║ SocialTypeId ║  SocialName  ║ IsAssign ║ 
╠══════════════╬════════════════════════╬══════════╣ 
║   5 ║ Person with disability ║  1 ║ 
╚══════════════╩════════════════════════╩══════════╝ 

выход Желание что-то вроде это

╔══════════════╦════════════════════════╦══════════╗ 
║ SocialTypeId ║  SocialName  ║ IsAssign ║ 
╠══════════════╬════════════════════════╬══════════╣ 
║   5 ║ Person with disability ║  1 ║ 
║   6 ║ Señior Citizen   ║  0 ║ 
║   7 ║ Unemployed    ║  0 ║ 
║   8 ║ Indigence    ║  0 ║ 
╚══════════════╩════════════════════════╩══════════╝ 
+0

КАК запрос возвращает только один столбец !! –

+1

Пожалуйста, укажите имя для всех таблиц, это очень запутанно и выведет желаемый результат вместо того, что возвращается ваш запрос. – Susang

+0

@Suraz i уже обновил вопрос, и желаемый результат уже отправлен, см. Последний результат таблицы. Спасибо – armory09

ответ

1

По своему результату желания, попробуйте следующее:

select 
     distinct st.SocialTypeId, 
     SocialName, 
     CASE 
      WHEN ss.SocialStatusId IS NULL 
      THEN CAST(1 AS bit) 
      ELSE CAST(0 AS bit) 
      END AS IsAssign 
from 
     SocialType st left outer join SocialStatus ss 
on  
     st.SocialTypeId = ss.SocialTypeId 
where 
     st.IsActive = 1 

The Результатов будет в следующем: -

enter image description here

Примечание:

О column " IsAssign ", ваш результат: 1 для SocialTypeId equlas 5 altought ss.SocialStatusId есть номер! , так что результат будет 0 в соответствии с CASE cluse, который вы использовали, есть ли что-то неправильно, любезно пересмотреть свой CASE cluse.


UPDATE зависит ниже comment-

Для фильтрации ss.residentId =8 Используйте его в условия соединения, а не ИНЕКЕ.

следующим образом: -

select 
     distinct st.SocialTypeId, 
     SocialName, 

     CASE 
      WHEN ss.SocialStatusId IS NOT NULL 
      THEN CAST(1 AS bit) 
      ELSE CAST(0 AS bit) 
      END AS IsAssign 
from 
     SocialType st left outer join SocialStatus ss 
on  
     st.SocialTypeId = ss.SocialTypeId and 
     ss.residentId =8 
where 
     st.IsActive = 1 
+0

Спасибо @ahmed abdelqader, действительно очень близко, но когда я пытаюсь фильтровать residentId = 8, человек с инвалидностью возвращается дважды, пожалуйста см. ссылку https://s28.postimg.org/909gjgawt/query.png https://s28.postimg.org/wfrdosunx/result.png – armory09

+0

@ armory09 ответ обновлен, plz посещает его, ожидая обратной связи с ур. –

+0

Большое вам спасибо, что это за магия.lol – armory09

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