>

간단한 COUNT 라고 생각한 것을 실행하려고합니다.  쿼리,하지만, 나는 COUNT 에 정통하지 않습니다 .

실행 중 :

SELECT SourceID, COUNT(*) as SourceCount
FROM dbo.Capture
WHERE SourceID in (37, 38, 130, 131, 132, 133)
GROUP BY SourceID

이 쿼리의 결과는 SourceID 가있는 행만 표시합니다.  COUNT 개가 0보다 큽니다. 카운트가없는 것을 포함하여 SourceID를 모두 표시하도록 결과를 얻는 방법은 다음과 같습니다. 옆에있는 SourceCount 에서 0 또는 NULL을보고 싶습니다.  열이 무엇이든 상관 없습니다.

감사합니다.


  • 답변 # 1

    이것을 시도하십시오 :

    SELECT SourceID, COUNT(*) AS SourceCount FROM dbo.Capture
    WHERE SourceID IN (37, 38, 130, 131, 132, 133)
    GROUP BY SourceID
    UNION
    SELECT *,0 FROM dbo.Split('137, 38, 130, 131, 132, 133',',')
    WHERE item NOT IN (SELECT SourceID FROM dbo.Capture WHERE SourceID IN (37, 38, 130, 131, 132, 133))
    
    

    여기에 dbo.Split 의 소스 코드가 있습니다.  기능 :

    CREATE FUNCTION [dbo].[Split] (@InputString VARCHAR(8000),@Delimiter VARCHAR(50))
    RETURNS @Items TABLE (Item VARCHAR(8000))
    AS
    BEGIN
          IF @Delimiter = ' '
          BEGIN
                SET @Delimiter = ','
                SET @InputString = REPLACE(@InputString, ' ', @Delimiter)
          END
          IF (@Delimiter IS NULL OR @Delimiter = '')
                SET @Delimiter = ','
          DECLARE @Item           VARCHAR(8000)
          DECLARE @ItemList       VARCHAR(8000)
          DECLARE @DelimIndex     INT
          SET @ItemList = @InputString
          SET @DelimIndex = CHARINDEX(@Delimiter, @ItemList, 0)
          WHILE (@DelimIndex != 0)
          BEGIN
                SET @Item = SUBSTRING(@ItemList, 0, @DelimIndex)
                INSERT INTO @Items VALUES (@Item)
                SET @ItemList = SUBSTRING(@ItemList, @DelimIndex+1, LEN(@ItemList)-@DelimIndex)
                SET @DelimIndex = CHARINDEX(@Delimiter, @ItemList, 0)
          END -- End WHILE
          IF @Item IS NOT NULL -- At least one delimiter was encountered in @InputString
          BEGIN
                SET @Item = @ItemList
                INSERT INTO @Items VALUES (@Item)
          END
          -- No delimiters were encountered in @InputString, so just return @InputString
          ELSE INSERT INTO @Items VALUES (@InputString)
          RETURN
    END -- End Function
    
    

  • 답변 # 2

    SELECT val.id, COUNT(*) as SourceCount
    FROM (values (37), (38), (130), (131), (132), (133)) val(id)
    LEFT JOIN dbo.Capture
      on SourceID = val.id
    GROUP BY val.id
    
    

  • 답변 # 3

    하위 쿼리 시도

    SELECT m.SourceID, (
            SELECT COALESCE((COUNT(*), 0) FROM dbo.Capture WHERE SourceID = m.SourceID) AS SourceCount
            FROM dbo.Capture m
            WHERE SourceID IN (37, 38, 130, 131, 132, 133)
            GROUP BY SourceID
            )
    
    

관련 자료

  • 이전 python - 문자열 목록의 구두점 사전
  • 다음 PHP 업로드 파일 확장자 보안