2017-01-31 58 views
0

我想弄清楚如何編碼某個子查詢。我不斷收到「子查詢返回超過1個值」的錯誤。我需要查詢父級訂單的描述而不是子級。SQL子查詢列其中名稱包含值

實施例:
父訂單:100-01 兒童訂單:100-02,100-03
每個訂單具有描述。但是,在一個專欄中,我需要家長的描述:

WHERE [ORDER] LIKE '%-01' 

當前代碼如下:

SELECT NAME as [Job], 
     [Master Job Desc] = (SELECT TOP 1 [DESCR] FROM TABLE WHERE [NAME] LIKE '%-01'), 
     LEFT(or_order.descr,30) as [Description], 
FROM TABLE 
ORDER BY OR_ORDER.DELIVERY asc, or_op.STARTSEC asc 

有什麼建議?謝謝

編輯:我忘了,我已經嘗試添加TOP 1到子查詢,但它只是返回整個列相同的值。我不想那樣,我想找到父母的工作訂單。

編輯2:這是我正在尋找的單獨的SQL。

SELECT [DESCR] FROM [Or_Order] WHERE [NAME] LIKE '%-01' 

上述語句返回名稱包含父作業號(-01)的描述。我需要在一個專欄中。

+0

如何這些訂單命名?連字符之前的數字是唯一的交易號碼和01,02等線/子號碼? – Kevin

+0

訂單被命名爲他們顯示。示例「100-01」是父作業。 「100-02」是一個不同的工作,但它是「100-01」的孩子。它們在表格中是分開的行。 – Datallboy

+0

在我看來,你在這裏苦苦掙扎,因爲你的數據通過將兩個數據點填入單個列而違反了1NF。如果這兩個值在兩列中而不是一列中的兩個值,這將更容易。如果可能的話,你應該改變設計......當然這並不總是可能的,我們必須摔倒以前不太理想的決定。 –

回答

0

您可以使用charindex()獲取訂單的父部分(直至連字符)並將其與'01'連接。有了這些,您可以加入到同一張表中以獲取父訂單描述。

select 
     Job = c.Name 
    , [Master Job Desc] = p.Descr 
    , [Description] = left(c.descr,30) 
    from or_order as c 
    left join or_order as p 
     on left(c.[order],charindex('-',c.[Order]))+'01' = p.[Order] 
    order by delivery asc, or_op.startsec asc 

rextester:http://rextester.com/GSN90790

create table or_order (
    [order] varchar(32) 
    , Name varchar(32) 
    , Descr varchar(32) 
); 

insert into or_order values 
    ('100-01','Name 1','Descr 1') 
    , ('100-02','Name 2','Descr 2') 
    , ('100-03','Name 3','Descr 3'); 

select 
    Job = c.Name 
    , [Master Job Desc] = p.Descr 
    , [Description] = left(c.descr,30) 
    from or_order as c 
    left join or_order as p 
     on left(c.[order],charindex('-',c.[Order]))+'01' = p.[Order] 

結果:

+--------+-----------------+-------------+ 
| Job | Master Job Desc | Description | 
+--------+-----------------+-------------+ 
| Name 1 | Descr 1   | Descr 1  | 
| Name 2 | Descr 1   | Descr 2  | 
| Name 3 | Descr 1   | Descr 3  | 
+--------+-----------------+-------------+ 
+0

父母和子女的工作訂單是同一張表和同一列的一部分。唯一將它們聯繫在一起的是訂單編號ex的前5個部分:100-01,100-02和部分相同,但101-01不同。他們在單獨的行上,沒有其他列告訴孩子他們的父母工作是什麼。我沒有設計數據庫,我只是試圖從中提取數據。 – Datallboy

+0

@Dallallboy添加了一個測試,告訴你我的意思。看起來我混淆了名爲'order'的列與'name'列。 – SqlZim

+0

現在它更有意義。 C和P從哪裏來? – Datallboy