Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

SQL सर्वर क्वेरी जो विशिष्ट तिथियों के लिए अनुपलब्ध डेटा की पहचान करती है

आप टैली टेबल का उपयोग कर सकते हैं Date . के सभी संयोजन उत्पन्न करने के लिए और Unit . सभी संयोजन प्राप्त करने के बाद, आप NOT EXISTS . का उपयोग कर सकते हैं लापता डेटा प्राप्त करने के लिए।

SQL Fiddle

DECLARE @minDate AS DATE
DECLARE @maxDate AS DATE

SELECT
    @minDate = MIN([Date]),
    @maxDate = MAX([Date])
FROM TestData


;WITH E1(N) AS(
    SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1 UNION ALL
    SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1
),
E2(N) AS(SELECT 1 FROM E1 a CROSS JOIN E1 b),
E4(N) AS(SELECT 1 FROM E2 a CROSS JOIN E2 b),
Tally(N) AS(
    SELECT TOP(DATEDIFF(DAY, @minDate, @maxDate) + 1)
        ROW_NUMBER() OVER(ORDER BY(SELECT NULL))
    FROM E4
),
CteDatesAndUnits([Date], Unit) AS(
    SELECT
        DATEADD(DAY, t.N - 1, @minDate),
        u.Unit
    FROM Tally t
    CROSS JOIN (
        SELECT DISTINCT Unit FROM TestData
    )u
)
SELECT *
FROM CteDatesAndUnits c
WHERE NOT EXISTS(
    SELECT * 
    FROM TestData
    WHERE
        [Date] = c.[Date]
        AND Unit = c.Unit
)

परिणाम

|       Date |   Unit |
|------------|--------|
| 2012-01-01 | Unit B |
| 2012-01-02 | Unit A |
| 2012-01-02 | Unit B |

चूंकि Unit हमेशा Unit A रहेगा और Unit B , आप इस लाइन को बदल सकते हैं:

SELECT DISTINCT Unit FROM TestData

इसके साथ:

SELECT 'Unit A' AS Unit UNION ALL SELECT 'Unit B'


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL सर्वर में जल्दी से 2 मिलियन पंक्तियाँ डालें

  2. लॉगिन द्वारा अनुरोधित डेटाबेस परीक्षण नहीं खोल सकता। लॉगिन विफल रहा। उपयोगकर्ता 'xyz\ASPNET' के लिए लॉगिन विफल

  3. SQL सर्वर 2008 खाली स्ट्रिंग बनाम स्पेस

  4. टेक्स्ट के साथ sql स्क्रिप्ट का उपयोग करके टेक्स्ट फ़ाइल कैसे बनाएं |

  5. संग्रहित प्रक्रिया - आउटपुट पैरामीटर या स्केलर के रूप में पहचान लौटाएं