2009-12-23 6 views
5

अगर सभी कोशिकाओं कुछ कॉलम में एक ही मूल्य है कैसे पता करने के लिए पता करने के लिए (शीर्षक बदल)कैसे करता है, तो सभी कोशिकाओं कुछ कॉलम में एक ही मूल्य है

मैं थोड़ा अदिश मूल्य है कि मुझसे कहता है करना चाहते हैं एक कॉलम बराबर कुछ में सभी मान यदि:

DECLARE @bit bit 
SELECT @bit = TRUEFORALL(Name IS NOT NULL) FROM Contact 

अद्यतन

मैं अब एहसास हुआ कि मैं वास्तव में TrueForAll की जरूरत नहीं है, मैं क्या चाहिए में सुनिश्चित करने के लिए, कि सभी मान है एक कॉलम बराबर है, उदाहरण के लिए, मुझे टी चाहिए ओ पता है कि सभी समूह। इटम्स की कीमत एक ही है।

उत्तर

4

इस तरह अपने अद्यतन की आवश्यकता कुछ के लिए आप क्या चाहते हैं करने के लिए प्रकट होता:

DECLARE @IsSameGroup bit 
SELECT @IsSameGroup = CASE WHEN COUNT(*) > 1 THEN 0 ELSE 1 END 
FROM (SELECT Name FROM Contact GROUP BY Name) groups 

जब गिनती है अधिक से अधिक 1 आप दो अलग-अलग नाम (या क्या आप समूह के आधार पर कीमतों)

+0

या बस 'संपर्क से गिनती (नाम) का चयन करें, है ना? – Blorgbeard

+1

@ ब्लॉगरबीर्ड उप-चयन समूह की संख्या की गिनती देता है। इसके बिना आपको केवल कई रिकॉर्ड मिलते हैं (प्रति समूह एक)। वास्तव में पाठ्यक्रमों के लिए घोड़े। –

1

शायद यह?

DECLARE @bit bit 
if exists(SELECT Name FROM Contact WHERE Name IS NULL) 
    SET @bit = 0 
ELSE 
    SET @bit = 1 
+1

पवित्र @@@@ कि इतने जल्दी थी! – Shimmy

+0

बेशक, यह ओपी के प्रश्न में व्यक्त तर्क के विपरीत है। यह 'जहां नाम शून्य है' होना चाहिए और 'बिट' को 0 पर सेट करना चाहिए, अन्यथा इसे 1. –

+0

पर सेट करें यदि 1+ रिकॉर्ड तर्क –

0

यह आपका पहला सवाल हल करती है:

SELECT 
    CASE 
     WHEN EXISTS(
      SELECT 1 
      FROM Contact 
      WHERE Name IS NULL 
     ) THEN 0 
     ELSE 1 
    END 

जोड़ा:

इस का समाधान होगा अपने दूसरे:

SELECT 
    CASE 
     WHEN EXISTS(
      SELECT TOP 1 1 FROM (
       SELECT 
        ItemGroupName, 
        COUNT(Price) AS CNT 
       FROM ItemGroup 
       GROUP BY ItemGroupName 
       HAVING COUNT(Price) > 1 
      ) t 
     ) THEN 0 
     ELSE 1 
    END 

वैसे, आप समारोह मौजूद उपयोग करते हैं, चयन 1 (स्थिर) के लिए बेहतर है इसलिए कम डेटा लौटाया जाता है

1

है NULLs के लिए बहुत अच्छा नहीं, लेकिन 2008 कर सकते हैं:

SELECT 1 WHERE 'Blue' = ALL (SELECT Color FROM dbo.Hat) 

या

DECLARE @bit bit 

SET @bit = 
CASE (SELECT 1 WHERE 'Blue' = ALL (SELECT Color FROM dbo.Hat)) 
WHEN 1 THEN 1 ELSE 0 END 

अद्यतन

सभी एक ही रंग

SET @bit = 
CASE(
    SELECT 1 WHERE 
    (SELECT TOP(1) Color FROM dbo.Hat) = ALL (SELECT Color FROM dbo.Hat) 
    ) 
WHEN 1 THEN 1 ELSE 0 END 
+0

मैं 2005 का उपयोग कर रहा हूं लेकिन जानना अच्छा है, पोस्टिंग के लिए धन्यवाद। – Shimmy

13

क्यों नहीं?

select count(distinct price) from table 

रिटर्न 1, सभी मान एक ही हैं ... जोड़ें

where price is not null

अगर जरूरत

+0

गिनती के लिए अपरिवर्तित (विशिष्ट एक्स), जो मेरे लिए यहां सबसे स्पष्ट समाधान प्रतीत होता है (निश्चित रूप से मैंने पहली बार सोचा था) और यह भी वैध एएनएसआई एसक्यूएल 92 है, और क्रॉस-प्लेफॉर्म जैसा आपको मिलेगा। – Cowan

+0

अंत में, 'चयन डिस्टिंट' के लिए एक गैर-हैकी उपयोग। – bonh

संबंधित मुद्दे