2015-08-19 27 views
-1

我在尋找,但我沒有看到與Distinct確切的問題。SQL DISTINCT加入或替代方法返回單一結果

SETUP
4表

Users (UserId, FirstName, LastName, Email, Phone) 
CuUsers (UserId, AccountId, PrimaryUser) 
HrUsers (UserId, EmployeeId, DeptId) 
VendUser (UserId, VendorId...) 

設計目的
用戶可以是這些僱員,客戶,供應商的任何或多個
A用戶可以是顧客的擁有者帳戶或多個帳戶
用戶可能是一個帳戶的所有者,另一個帳戶的僱員可能是

此查詢
是試圖讓客戶用戶只

期望的結果
的名單我想的LastName字母順序排列,這樣我可以把它作爲一個按鈕,過濾器,以便我只得到字母的結果,用戶的客戶,使也就是說,如果沒有人的姓氏與ZI開始沒有得到AZ過濾

<asp:ListView ID="lvSelectCustomerAlpha" runat="server" DataSourceID="SqlSelectUserAlpha" 
     DataKeyNames="UserId" EnableModelValidation="True"> 
    <ItemTemplate> 
     <asp:Button Text='<%# Eval("LastName") %>' runat="server" ID="btnAlpha" 
       CommandArgument='<%# Eval("UserId") %>' OnClick="btnSelectAnAccount_Click" 
       CssClass="small" /> 
    </ItemTemplate> 
    <LayoutTemplate> 
     <div runat="server" id="itemPlaceholderContainer" class="pager">       
      <div class="clr"></div> 
       <span class="title">Last Name:</span> 
       <div runat="server" id="itemPlaceholder"></div> 
      </div> 
    </LayoutTemplate> 
</asp:ListView> 
<asp:SqlDataSource runat="server" ID="SqlSelectUserAlpha" 
    ConnectionString='<%$ ConnectionStrings:MySolutionsCnSt %>' 
    SelectCommand="SELECT DISTINCT(SUBSTRING(Users.LastName,1,1)) AS LastName, CuAcctsUsr.UserId FROM CuAcctsUsr LEFT OUTER JOIN Users ON CuAcctsUsr.UserId = Users.UserId" /> 

SQL命令

SELECT DISTINCT(SUBSTRING(Users.LastName,1,1)) AS LastName, 
     CuAcctsUsr.UserId FROM CuAcctsUsr LEFT OUTER JOIN Users ON 
     CuAcctsUsr.UserId = Users.UserId 

我的列表返回升4個實例時,我只需要一個,我需要的userId從一個表中獲取用戶信息併爲您在其他客戶,否則我要複製所有的用戶信息到這兩個表。

如果UserId的不同,有沒有辦法只返回LastName字段中使用的每個字母的單個實例?我道歉,如果這之前已經公佈,但我沒有看到確切的工作,爲這種類型的請求 !(http://mycleaningsolution.com/desiredresult.jpg

+0

這是一個嚴重的書面質詢。請以更具可讀性的方式來設置問題的格式,而不是沒有標點符號的長段。另外,只包含SQL本身。所有其他XML文本與你的問題有什麼關係?請參閱http://stackoverflow.com/help/mcve – Andreas

+0

首次用戶,沒有像我想要的格式,抱歉。我想我的問題是,爲什麼Sql不只是DISTINCT我想要的一列而不是其他的,爲什麼它應用不同的所有,是否有一個解決方法,而不必重複表的列和數據? –

+1

DISTINCT適用於** all **結果列。這就是SQL DISTINCT的工作原理。 – Andreas

回答

1

DISTINCT不是一個函數,它是適用於SELECT聲明的關鍵字。語句的語法是:

SELECT [DISTINCT] expr, expr, ... FROM table ... 

添加DISTINCT關鍵字將確保刪除重複的行,從而導致行成爲「獨特」。比較整個行。

要在列的子集上做類似的事情,請看GROUP BY

你的語法看起來令人困惑:

SELECT DISTINCT(SUBSTRING(Users.LastName,1,1)) AS LastName, 
     CuAcctsUsr.UserId 

-- Same as above 
SELECT DISTINCT (SUBSTRING(Users.LastName,1,1)) AS LastName, 
        CuAcctsUsr.UserId 

-- Same as above 
SELECT DISTINCT SUBSTRING(Users.LastName,1,1) AS LastName, 
        CuAcctsUsr.UserId 
0
select lastname , min(id) from 
(SELECT DISTINCT(SUBSTRING(name,1,1)) AS LastName, id from tbl1) as myusers 
group by lastname 

此代碼只返回一個用戶ID對每個字母