iT邦幫忙

0

【已解決】SQL 語法一問 (MSSQL)

各位好,小弟的SQL學藝不精,想請教以下這個查詢該怎麼下

以下是大略資料表

資料表 table
欄位A
欄位B

我希望查詢出
在同一個欄位A的值時,是否存在不同的欄位B值,甚至可以列出來?

例如以下幾筆資料
      A      B
1     10    apple
2     10    pen
3     13    pig
4     13    pig

我必須找出像A是10這種 有存在B欄位不相同的資料~

謝謝!!

恩~看不懂你說的@@..
可以在詳細舉例嗎?原始資料→期望結果
原始資料如以上四筆

期望結果
10

因為欄位A是10的時候,會有出現不同的欄位B值
2
rogeryao
iT邦大師 3 級 ‧ 2021-04-14 14:22:46
最佳解答
CREATE TABLE XX (
A int,B varchar(10));

INSERT INTO XX
Values(10,'apple'),
(10,'pen'),
(13,'pig'),
(13,'pig'),
(14,'MM');
SELECT A
FROM (
SELECT DISTINCT A,B
FROM XX
) AS YY
GROUP BY A
HAVING COUNT(A)>1

Demo

酷~~完全是我要的答案並且很簡易@@
我得好好研究這串,感謝你!

我原本寫的也接近這樣了...可就是功力不足兜不出來/images/emoticon/emoticon02.gif

1
allenlwh
iT邦高手 1 級 ‧ 2021-04-14 14:01:21
CREATE TABLE [dbo].[_Tmp_0414](
	[idx] [int] IDENTITY(1,1) NOT NULL,
	[A] [nvarchar](10) NULL,
	[B] [nvarchar](10) NULL
) ON [PRIMARY]

GO

  select distinct A
      ,(select distinct B+',' from [_Tmp_0414] where A=t0.A for xml path(''))
          as result      
  from [_Tmp_0414] t0  
A	result
10	apple,pen,
13	pen,

這方法不錯,但得肉眼看是否有多個,我有把後面改成count(dinstict)好看一些,這寫法也讓我學習到,感謝!!

1
純真的人
iT邦高手 1 級 ‧ 2021-04-14 14:17:38

恩~你期望結果是 10
所以是這樣嗎??

declare @Tmp table(
	A nvarchar(50)
	,B nvarchar(50)
)
insert into @Tmp
values('10','apple')
,('10','pen')
,('13','pig')
,('13','pig')

select *
from @Tmp a
group by A,B
having Count(0) = 1

select A
from (
	select *
	from @Tmp a
	group by A,B
	having Count(0) = 1
) k
group by A

https://ithelp.ithome.com.tw/upload/images/20210414/20061369uMOGvkj8T6.png

看更多先前的回應...收起先前的回應...

看起來答案是對的~ 不過我不懂having Count(0) = 1 代表什麼?
了解了才能確定這樣解是不是我要的~
感謝你也讓我看到新寫法

那邊的Having 是群組的過濾條件~
Count 是相同資料的次數~

哦這兩個我知道 Count(0)比較不懂

Count(0)跟Count(*)
是一樣的@@..

嗯嗯 研究了一輪 看懂了XD /images/emoticon/emoticon01.gif

我要發表回答

立即登入回答