2016-04-21 55 views
0

能否請你幫我,將顯示一個像這樣的表的查詢:對於下面的示例表,查詢會是什麼?

 
Dept_ID    Dept_Name 

10      Admin 
10      Whalen 
20      Sales 
20      James 
20      King 
20      Smith 
40      Marketing 
40      Neena 

等等......該模式是HR

顯示部門ID和部門名稱,然後後續員工姓氏在該部門工作

+0

爲什麼union-all?這只是選擇查詢 –

+3

要麼這是一個非常基本的查詢,你應該只是閱讀一個教程,或者它看起來更復雜,你應該描述你的數據庫模式和你試圖作爲查詢,如果你需要幫助。 – polku

+0

簡短的答案是'不'。你想讓'dept_name'列同時保存部門名稱和員工姓氏?這是一個基本上破碎的設計。你至少應該有另一個名爲'type'的列,它解釋了這一行描述的內容(一個部門或一個員工)。但更好的部門名稱應該與員工姓名在不同的列中。如果這是關於格式化顯示結果,請在您的應用程序中格式化... – MatBailie

回答

0

當工會兩組數據,沒有隱含的排序,你可以得到任何順序的結果。

獲取您的特定訂單必須使用ORDER BY

要使用ORDER BY,那麼你的必須有字段做排序依據。

在你的情況下,僞代碼將是...
- ORDER BY [dept_id], [depts-then-employees], [dept_name]

這三個的中間是,你將不得不創造一些東西。

這樣做的一種方法如下。

:僅僅因爲你有一個字段來ORDER BY,並不意味着你必須選擇它。

SELECT 
    dept_id, 
    dept_name 
FROM 
(
    SELECT 
     d.dept_id, 
     d.dept_name, 
     0 AS entity_type_ordinal 
    FROM 
     department d 

    UNION ALL 

    SELECT 
     d.dept_id, 
     e.employee_name, 
     1 AS entity_type_ordinal 
    FROM 
     department d 
    INNER JOIN 
     employee  e 
      ON e.dept_id = d.dept_id 
) 
    dept_and_emp 
ORDER BY 
    dept_id, 
    entity_type_ordinal, 
    dept_name 
+0

謝謝這麼多席! 我在測試了這一點,我絕對沒有線索,我一直都曾經傷透我的大腦從那時起:/ 這是一些來自經驗或者說是直線前進,我只是din't明白了嗎?它是低級代碼嗎? –

+0

@AsimKhan - 如果這裏的任何答案都有幫助,請對它們進行投票並/或將它們標記爲已接受的答案:)至於如何低級或困難,最難的部分是瞭解在SQL中, ***一個固有的數據命令,你需要使用'ORDER BY',所以你需要有*東西*來完成排序。我會說這是簡單到中等程度的複雜性。 – MatBailie

1
SELECT Dept_ID, Dept_Name 
FROM Your_Table 

簡單,因爲我可以做到。如果沒有關於表結構和一些示例數據的詳細信息,確切地說明查詢應該是什麼是非常困難的(幾乎不可能)。

從您的編輯中,您可能需要更多類似的東西;

SELECT DT.Dept_ID, DT.Dept_Name, ET.Emp_Name 
FROM Dept_Table AS DT INNER JOIN Emp_Table AS ET ON DT.Dept_ID = ET.Dept_ID 
ORDER BY Dept_ID 

這顯示了下一列的每個部門的員工,你並不是真的希望所有人都在同一列。

+0

不是那麼簡單加上,不會產生所需的輸出... –

+0

我期待儘可能多的Asim,請編輯您的文章更詳細,因爲我已在我的答案中描述,我會相應地編輯它。 – William

+2

@AsimKhan - 對於任何希望幫助你的人,你都需要提供更多信息。 '不產生所需的輸出'是非常無益的,除非你解釋你得到了什麼樣的輸出,以什麼樣的方式,它不是你所期望/需要的。至於你的問題;你需要告訴我們你有哪些表格,它們是如何相關的,你期望的結果例子很重要(排序,格式等)。你可能會說「我需要贏」,而不解釋你在玩什麼遊戲。 – MatBailie

0

假設有一個在你的數據庫中的表稱爲departments保存這些信息,你的代碼可能是這樣的:

select 
    dept_id, dept_name 
from 
    departments 
0

如果你想顯示該表的某些列像你問的問題上面,你可以使用下面的語法:從table_name的

重新

選擇COLUMN_NAMES地點:

  1. COLUMN_NAMES您要顯示由昏迷 2.table_name與它的列要顯示

    對上述問題的表的名稱分隔的列名,下面的代碼會做:

選擇DEPT_ID,DEPT_NAME從部;

上面的代碼工作,如果你的表名是「部門」