2016-08-25 44 views
1

我使用SQL Server 2014有兩個表:ApplicationProjectLOV_SIP_ALLSTAFFSQL UNION不工作

ApplicationProjectLO

|---------------------|---------------------------| 
|  StaffEmailId |    Type   | 
|---------------------|---------------------------| 
|  chinkim1  |    L   | 
|---------------------|---------------------------| 
|  kandiah1  |    A   | 
|---------------------|---------------------------| 

V_SIP_ALLSTAFF

|---------------------|----------------|-------------------|---------------| 
|  lOGINID  | displayname | Email Address |MainOfficeTelNo| 
|---------------------|----------------|---------------- |-------------- | 
|  chinkim1  | james  |  1   |  5  | 
|---------------------|----------------|---------------- |---------------| 
|  kandiah1  | hoho  |  2   |  8  | 
|---------------------|----------------|---------------- |---------------| 

我想根據'類型'顯示信息。

所以如果StaffEmailId匹配LONGINID和類型是AA類型(即hoho2,和8)必須顯示的信息,並且如果類型是L然後它james1,和5絕被顯示。

我試圖用UNIONUNION ALL在一個查詢運行兩個SELECT語句,但它只是基於該查詢返回type=L結果:

SELECT 
    vsa.displayname NameofLiaisonOfficer, 
    vsa.EmailAddress LOEmail, 
    '(65)' +' '+ convert(varchar, vsa.MainOfficeTelNo) as LOContactNo, 
    vsa.MainOfficeTelNo GeneralOfficeConatctNo 
FROM ApplicationProjectLo ap 
INNER JOIN V_SIP_ALLSTAFF vsa ON ap.StaffEmailId = vsa.LOGINID 
WHERE ap.Type = 'L' 

UNION ALL 

SELECT 
    vsa.displayname NameofAlternateLiaisonOfficer, 
    vsa.EmailAddress AlternateLOEmail, 
    '(65)' +' '+ convert(varchar, vsa.MainOfficeTelNo) as AlternateLOContactNo, 
    vsa.MainOfficeTelNo GeneralOfficeConatctNo 
FROM ApplicationProjectLo ap 
INNER JOIN V_SIP_ALLSTAFF vsa ON ap.StaffEmailId = vsa.LOGINID 
WHERE ap.Type = 'A' 

MVC視圖:

<tr> 
    <td colspan="3"> 
     <strong>Name of Liaison Officer</strong> 
     <br /> 
     <br /> @Html.DisplayFor(m => m.TPInformationDetails.NameofLiaisonOfficer) 
    </td> 
    @* 
    <td> 
     <strong>Room Number</strong> 
     <br /> 
     <br /> 
    </td>*@ 
    <td> 
     <strong>Contact Number</strong> 
     <br /> 
     <br /> @Html.DisplayFor(m => m.TPInformationDetails.LOContactNo) 
    </td> 
    <td> 
     <strong>Email Address</strong> 
     <br /> 
     <br /> @Html.DisplayFor(m => m.TPInformationDetails.LOEmail) 
    </td> 
</tr> 
<!-- Table Row --> 
<tr class="even"> 
    <td colspan="3"> 
     <strong>Name of Alternate Liaison Officer</strong> 
     <br /> 
     <br /> @Html.DisplayFor(m => m.TPInformationDetails.NameofAlternateLiaisonOfficer) 
    </td> 
    <td> 
     <strong>Contact Number</strong> 
     <br /> 
     <br /> @Html.DisplayFor(m => m.TPInformationDetails.AlternateLOContactNo) 
    </td> 
    <td> 
     <strong>Email Address</strong> 
     <br /> 
     <br /> @Html.DisplayFor(m => m.TPInformationDetails.AlternateLOEmail) 
    </td> 
</tr> 
<!-- Table Row --> 
+0

爲什麼您使用的不是加入工會嗎? – Zeina

+1

你能先分離出問題嗎? MVC是相關的嗎? – qxg

+0

根據提供的答案,它不使用綁定到查詢的模型。例如,Name of LiaisonOfficer,但對於Type A,它是Name ofAlternateLisisonOfficer。如果我只是使用NameofLiaisonOfficer並綁定到視圖,它將顯示相同的結果。 – user3807187

回答

0
const string _sqlODetails = @"SELECT vsa.displayname NameofLiaisonOfficer, 
               vsa.EmailAddress LOEmail, 
               '(65)' +' '+ convert(varchar, vsa.MainOfficeTelNo) as LOContactNo, 
               vsa.MainOfficeTelNo GeneralOfficeConatctNo 
              FROM ApplicationProjectLo ap 
              INNER JOIN V_SIP_ALLSTAFF vsa ON ap.StaffEmailId = vsa.LOGINID 
              WHERE ap.Type = 'L'"; 

      using (var connection = Db.SqlServer()) 
      { 
       tpOdetails = connection 
        .Query<TPInformationDetails>(_sqlODetails) 
        .FirstOrDefault(); 
      } 

      const string _sqlADetails = @"SELECT vsa.displayname NameofAlternateLiaisonOfficer, 
                vsa.EmailAddress AlternateLOEmail, 
                '(65)' +' '+ convert(varchar, vsa.MainOfficeTelNo) as AlternateLOContactNo, 
                vsa.MainOfficeTelNo GeneralOfficeConatctNo 
              FROM ApplicationProjectLo ap 
              INNER JOIN V_SIP_ALLSTAFF vsa ON ap.StaffEmailId = vsa.LOGINID 
              WHERE ap.Type = 'A'"; 

      using (var connection = Db.SqlServer()) 

      { 
       tpAdetails = connection 
        .Query<TPInformationDetails>(_sqlADetails) 
        .FirstOrDefault(); 
      } 
0
SELECT 
    vsa.displayname NameofLiaisonOfficer, 
    vsa.EmailAddress LOEmail, 
    '(65)' +' '+ convert(varchar, vsa.MainOfficeTelNo) as LOContactNo, 
    vsa.MainOfficeTelNo GeneralOfficeConatctNo 
FROM ApplicationProjectLo ap 
INNER JOIN V_SIP_ALLSTAFF vsa ON ap.StaffEmailId = vsa.LOGINID 
WHERE ap.Type IN ('A', 'L') 
+0

這意味着我只從L返回值,那麼A呢?我根據ApplicationProjectLO中的類型'A'或'L'返回來自同一個表V_SIP_ALLSTAFF的值。 – user3807187

+0

@ user3807187哦,這比我預期的更簡單。檢查更新後的答案 – Backs

+0

hI,謝謝。但是,它只返回類型L的值。 – user3807187

0

您需要JOIN,而不是UNIONJOIN根據共同的keyfield(s)合併來自兩個表格的列。

SELECT a.field1, b.field1, b.field2 FROM table1 a JOIN table2 b ON a.keyfield=b.keyfield; 
0

只需問心無愧分配的WHERE

SELECT vsa.displayname as NameofLiaisonOfficer, 
     vsa.EmailAddress LOEmail, 
     '(65)' +' '+ convert(varchar, vsa.MainOfficeTelNo) as LOContactNo, 
     vsa.MainOfficeTelNo GeneralOfficeConatctNo 
FROM ApplicationProjectLo ap INNER JOIN 
     V_SIP_ALLSTAFF vsa 
     ON ap.StaffEmailId = vsa.LOGINID; 

或者使用WHERE,其中包括兩種類型:

SELECT vsa.displayname as NameofLiaisonOfficer, 
     vsa.EmailAddress LOEmail, 
     '(65)' +' '+ convert(varchar, vsa.MainOfficeTelNo) as LOContactNo, 
     vsa.MainOfficeTelNo GeneralOfficeConatctNo 
FROM ApplicationProjectLo ap INNER JOIN 
     V_SIP_ALLSTAFF vsa 
     ON ap.StaffEmailId = vsa.LOGINID; 
WHERE ap.Type IN ('A', 'L'); 

這就是說,它目前還不清楚爲什麼查詢 - 儘管過複雜 - 不會返回這兩種類型。一種可能性是你使用的是國家字符集,而「A」並不是真正的「A」。

+0

hI,謝謝。但是,它只返回類型L的值。 – user3807187

+0

嗨,這樣做會導致相同的值。即時通訊使用MVC,請檢查我更新後的帖子。謝謝。 – user3807187

0

使用下面的查詢來顯示類型爲'L'和'A'的結果。

SELECT 
    vsa.displayname NameofLiaisonOfficer, 
    vsa.EmailAddress LOEmail, 
    '(65)' +' '+ convert(varchar, vsa.MainOfficeTelNo) as LOContactNo, 
    vsa.MainOfficeTelNo GeneralOfficeConatctNo 
FROM ApplicationProjectLo ap 
INNER JOIN V_SIP_ALLSTAFF vsa ON ap.StaffEmailId = vsa.LOGINID 
WHERE ap.Type IN ('L','A') 
ORDER BY ap.Type desc 
+0

嗨,這樣做會導致相同的值。即時通訊使用MVC,請檢查我更新後的帖子。謝謝。 – user3807187