2016-06-21 31 views
0

IAM試圖返回從表2場的行具有在值的差異的差異,而不是作爲一個SQL智者我堅持任何幫助將:-)返回兩個從SQL錶行與價值觀

TABLE A: 

NAME DATA 
Oscar HOME1 
Jens HOME2 
Will HOME1 
Jeremy HOME2 
Al  HOME1 
理解

結果,應該是2個,在數據值

NAME DATA 
Oscar HOME1 
Jeremy HOME2 

任何差別隨機行?

+0

更好的是,如果代碼不需要像HOME1 <> HOME2 – dahund

+0

這樣的靜態條目什麼是你的rdbms? Sql Server,Postgres,Oracle? –

+0

這個問題應該屬於代碼高爾夫嗎? http://codegolf.stackexchange.com/ – ebyrob

回答

0

Couuld是你需要

select * from my_table a 
inner join my_table b on a.data !=b.data 
where a.data in (SELECT data FROM my_table ORDER BY RAND() LIMIT 1); 

爲您的代碼

SELECT * 
FROM [dbo].[ComputerState] as a 
INNER JOIN [dbo].[ComputerState] as b ON a.ServiceName != b.ServiceName 
WHERE a.ServiceName IN ( 
    SELECT top 1 [ServiceName] FROM [dbo].[ComputerState] 
); 
+0

這是如何返回2個隨機行? –

+0

@devlincarnate correct ..我用隨機數據更新答案 – scaisEdge

+0

這將返回一行,其中包含2組值。問題在兩個單獨的行中要求值。 – ebyrob

0

如果真正的問題是這個簡單,你可以使用聚合如MAX()MIN()抓住每一行對應一個不同DATA

SELECT MAX(NAME), DATA 
FROM  TABLE_A 
GROUP BY DATA 

。當然,如果有其他變量引入需求,這可能不再有效。

+1

這是如何隨機? –

+0

@devlincarnate好點,我讀了最重要的部分,重點是簡單地使用不同的'DATA'值。如果它必須是真正的隨機,那麼這將無法工作。 –

+0

列'DATA'在選擇列表中無效,因爲它不包含在聚合函數或GROUP BY子句中。你知道這是什麼? – dahund

2

簡單的方法有隨機數據。

;with tblA as (
select name,data, 
row_number() over(partition by data order by newid()) rn 
from A 
) 
select name,data 
from tblA 
where rn = 1 
+0

不是嗎? OP需要2行(或「IN(1,2)」)時,<= 2? – Igor

+0

@Igor號碼請參閱'partition by' –

+0

這裏假設OP有Sql Server。 –

0
;WITH cteA AS (
    SELECT 
     name 
     ,data 
     ,ROW_NUMBER() OVER (PARTITION BY data ORDER BY NEWID()) as DataRowNumber 
     ,ROW_NUMBER() OVER (PARTITION BY 1 ORDER BY NEWID()) as RandomRowNumber 
    FROM 
     A 
) 

SELECT * 
FROM 
    cteA 
WHERe 
    DataRowNumber = 1 
    AND RandomRowNumber <= 2 

它擴展了@AlexKudryashev的回答一點。

;with tblA as (
select name,data, 
row_number() over(partition by data order by newid()) rn 
from A 
) 
select name,data 
from tblA 
where rn = 1 

與他遇到的唯一問題是,行,其中rn = 1將在COUNT(DISTINCT data)被信賴的號碼,這樣就可能導致超過2分的結果。要解決這個問題,可以添加一個SELECT TOP 2子句,但它可能不完全是隨機的,因爲它將取決於SQL優化可能一致的查詢的順序結果。要真正隨機添加第二個隨機行號,並將結果限制在其中的前兩個。