2013-03-19 17 views
4

我需要寫一些SQL在表中,我選擇了寫的一些數據,然後排序和/或過濾器。這裏有一個大大簡化例子...SQL如何通過寫上 過深重的數據對這些數據的數據,然後排序或篩選

我有滿滿一桌子的寵物的名字叫做PET

PET_NAME PET_SPECIES PET_PK 
---------- ----------- ----------- 
Barney  Dog   {PETGUID1} 
Fergus  Cat   {PETGUID2} 
Meatball Hamster  {PETGUID3} 

我已經保存他們的生活狀態的另一個表稱爲生命

LIF_PK  LIF_STATUS LIF_PET_FK 
---------- ------------ ------------ 
{LIFGUID1} Alive  {PETGUID1} 
{LIFGUID2} Alive  {PETGUID2} 
{LIFGUID3} Dead   {PETGUID3} 

我想報告寵物和他們的生活狀態。

SELECT   PET_NAME, 
       PET_SPECIES, 
       LIF_STATUS 
FROM   PET 
INNER JOIN  LIFE ON LIF_PET_PK=PET_PK 

那裏的寵物死了,我不想報告名稱,只是有'DEADPET'代替。
太多的回憶。 然後我想按寵物名稱排序。

我以爲我可以創建一個代理變量,然後將其設置爲寵物的名字只有當寵物還活着例如 case語句......

DECLARE  @petName nvarchar(18) 
SELECT  @petName=(CASE LIF_STATUS='Alive' THEN PET_NAME ELSE 'DEADPET' END), 
      PET_SPECIES, 
      LIF_STATUS 
FROM   PET 
INNER JOIN LIFE ON LIF_PET_PK=PET_PK 
ORDER BY  @petName 

但我不能這樣做,TSQL不會允許它。

當然,在現實中,這有什麼好做寵物是所有做與金融貸款{肉丸的生命!} 但原理是一樣的。

任何幫助,我可以不用它,將不勝感激,謝謝提前。

+0

想,如果你嘗試過(CASE LIF_STATUS =「活着」,然後PET_NAME ELSE「DEADPET」它的工作END)作爲「ABCD」,然後是「ABCD」的ORDER BY – uchamp 2013-03-19 10:21:17

+0

也許就是這樣。我不得不使用(CASE LIF_STATUS當'死'然後死'其他'PET_NAME END),因爲TSQL抱怨我用於比較等號,但這可能是答案。 – 2013-03-19 10:45:39

+0

讓我知道如果這工作,我會張貼它作爲答案:) – uchamp 2013-03-19 10:59:16

回答

2

我認爲以下應爲你工作(也包含關於變量賦值你的bug修正):

SELECT  (CASE LIF_STATUS='Alive' THEN PET_NAME ELSE 'DEADPET' END) as `PET_NAME` 
      PET_SPECIES, 
      LIF_STATUS 
FROM   PET 
INNER JOIN LIFE ON LIF_PET_PK=PET_PK 
ORDER BY  `PET_NAME` 
+0

奇怪,問題有被編輯爲「覆蓋」而不是「覆蓋」,這是我的意圖。我不想重寫數據,這意味着要更改數​​據庫中的數據。我想用我自己的價值,純粹是在報告中重寫數據。哦,沒什麼大不了的,雖然不是很好。 – 2013-03-19 12:31:41

+0

啊!我建議改變,因爲我認爲你錯誤地寫了這個。你提到在問題細節中重寫了幾次。因此,編輯。我認爲標題可以通過在查詢時提及覆蓋寫得更清楚。你怎麼看? – uchamp 2013-03-19 12:43:50

+0

我不介意,不要大聲,並感謝您的幫助。我在這方面所做的所有工作都受到了挫折,但我必須做一個嵌套選擇。活到老,學到老... – 2013-03-20 09:59:30

相關問題